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.

enter image description here

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top