Wie berechnete Spalte nicht auf NULL festlegbare machen?
-
20-09-2019 - |
Frage
Bisher habe ich ISNULL(dbo.fn_GetPrice(ItemId), 0)
benutze es, um keine Nullwerte enthalten (und nicht nennen es default-Wert, aber was auch immer).
Ist das der richtige Weg?
Lösung
Ja, das ist der richtige Weg, es zu tun. Durch die Verwendung der isnull
Funktion Sie einen Ausdruck erstellen, die einen Wert zurückgeben muss, egal was passiert. Dies wird von SQL Server ausgewertet eine berechnete Spalte zu sein, die not null
ist.
Andere Tipps
würde ich die ANSI-Standard COALESCE Funktion bevorzugen, aber ISNULL ist in Ordnung. So verwenden Sie COALESCE, definieren Sie Ihre berechnete Spalte als:
COALESCE(dbo.fn_GetPrice(ItemId), 0)
Bearbeiten Erfahren Sie jeden Tag etwas Neues. Ich habe die folgenden:
create table t (c1 int null
, c2 as isnull(c1, 1)
, c3 as isnull(c1, null)
, c4 as coalesce(c1, 1)
, c5 as coalesce(c1, null)
)
exec sp_help t
Und c2 ist in der Tat nicht auf NULL festlegbare nach sp_help, aber c4 wird als NULL festlegbare berichtet, obwohl es keine Möglichkeit gibt, dass coalesce Ausdruck in einem Nullwert führen kann.
Auch als 2008, ich weiß nicht, ob die Option im Jahr 2005 existiert, kann man eine berechnete Spalte bestehen bleiben und eine Einschränkung hinzufügen:
create table t (c1 int null
, c2 as isnull(c1, 1) persisted not null
, c3 as isnull(c1, null) persisted not null
, c4 as coalesce(c1, 1) persisted not null
, c5 as coalesce(c1, null) persisted not null
)
go
insert into t (c1) values (null)
führt zu einer Einschränkungsverletzung.