Wie wurde ein Nicht-Null-Datum in einer Ansicht nullfähig
-
21-12-2019 - |
Frage
Ich habe ein Datum / Uhrzeit-Feld in einer Tabelle namens dbo.Traffic
Ich versuche, Verkehrsdaten nach Tag zu aggregieren.Ich plane, eine Schemabound-Ansicht zu erstellen und einen Index hinzuzufügen.
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
In der Basistabelle ist createDate nicht nullfähig.Sobald ich jedoch eine Ansicht erstelle und in ein Datum konvertiere, wird sie nullfähig.
Lösung
Dies liegt daran, wie sich berechnete Spalten in Bezug auf die Nullbarkeit verhalten.Checken Sie es ein hier auf MSDN:
Das Datenbankmodul bestimmt automatisch die Nullwertfähigkeit berechneter Spalten basierend auf den verwendeten Ausdrücken.Das Ergebnis der meisten Ausdrücke wird als nullfähig betrachtet, auch wenn nur nicht nullfähige Spalten vorhanden sind, da mögliche Unterläufe oder Überläufe ebenfalls Null-Ergebnisse erzeugen.Verwenden Sie die COLUMNPROPERTY-Funktion mit der AllowsNull-Eigenschaft, um die Nullwertfähigkeit einer berechneten Spalte in einer Tabelle zu untersuchen. Ein Ausdruck, der nullwertfähig ist, kann durch Angabe von ISNULL(check_expression, constant) in einen Nicht-Nullwert umgewandelt werden, wobei die Konstante ein Nicht-Null-Wert ist, der durch ein beliebiges Null-Ergebnis ersetzt wird.
Sie können das als Ihre verwenden CreateDate
.Sie müssen sich keine Gedanken über den konstanten Wert machen, wie Sie es niemals tun sollten NULL
:
ISNULL(CONVERT(date, CreateDate),0) as CreateDate