In che modo una data non nullo è diventata nullabile in una vista
-
21-12-2019 - |
Domanda
Ho un campo DateTime in una tabella chiamata dbo.Traffic
Sto cercando di aggregare i dati del traffico di giorno.Sto pianificando di creare una vista schemabound e aggiungendo un indice.
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
.
Nella tabella di base, creare la creazione non è nullabile.Tuttavia, non appena creo una vista e lo convertono in una data, diventa nullabile.
Soluzione
Questo è a causa di come le colonne calcolate si comportano in termini di nullabilità. Controllalo in qui su MSDN :
.Il motore del database determina automaticamente la nullabilità delle colonne calcolate in base alle espressioni utilizzate. Il risultato della maggior parte delle espressioni è considerato nullabile anche se sono presenti solo colonne non riservabili, poiché possibili sottofoni o overflow produrranno anche risultati nullo. Utilizzare la funzione ColumnProperty con la proprietà consente di indagare sulla nullabilità di qualsiasi colonna calcolata in una tabella. Un'espressione che è nullabile può essere trasformata in uno non pignorable specificando isndull (check_expression, costante), in cui la costante è un valore non negativo sostituito per qualsiasi risultato null .
Puoi usarlo come il tuo CreateDate
. Non devi preoccuparti del valore costante come non dovresti mai avere NULL
:
ISNULL(CONVERT(date, CreateDate),0) as CreateDate
.