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.

enter image description here

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top