Como é que um não nulo data de tornar-se nulo em um modo de exibição
-
21-12-2019 - |
Pergunta
Eu tenho um campo de data / hora em uma tabela chamada dbo.Traffic
Eu estou tentando agregar o tráfego de dados por dia.Eu sou planejamento sobre a criação de um schemabound visualizar e adicionar um índice.
CREATE VIEW [dbo].[vwTraffic] WITH SCHEMABINDING AS
SELECT CONVERT(date, CreateDate) as CreateDate, Circuit, Fuseaction,
COUNT(CreateDate) AS activity
FROM dbo.Traffic WITH (NOLOCK)
GROUP BY CONVERT(date, CreateDate), Circuit, Fuseaction
Na tabela base, CreateDate não é anulável.No entanto, assim que eu criar um modo de exibição e convertê-lo para uma data, torna-se nulo.
Solução
Isto é devido a como as colunas computadas se comportam em termos de nulidade.Check-in aqui no MSDN:
O Mecanismo de Banco de dados determina automaticamente a condição de nulidade de colunas calculadas com base nas expressões utilizadas.O resultado da maioria das expressões é considerado nulo, mesmo se apenas nonnullable colunas estão presentes, devido a possíveis fluxos de fundo ou estouros irá produzir resultados nula bem.Use o COLUMNPROPERTY função com o AllowsNull propriedade para investigar a condição de nulidade de qualquer computadorizada de coluna em uma tabela. Uma expressão que é anulável pode ser transformado em um nonnullable um especificando ISNULL(check_expression, constante), onde a constante é um valor não nulo substituído por qualquer resultado nulo.
Você pode usar isso como seu CreateDate
.Você não tem de se preocupar com o valor constante como você nunca deve ter NULL
:
ISNULL(CONVERT(date, CreateDate),0) as CreateDate