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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top