Frage

Ich versuche, diese berechnete Spalte zu haben:

CREATE TABLE dbo.Item
(
    ItemId int NOT NULL IDENTITY (1, 1),
    SpecialItemId int NULL,
    --I tried this
    IsSpecialItem AS ISNULL(SpecialItemId, 0) > 0, 
    --I tried this
    IsSpecialItem AS SpecialItemId IS NOT NULL
    --Both don't work
)  ON [PRIMARY]
War es hilfreich?

Lösung

Das funktioniert:

CREATE TABLE dbo.Item
(
    ItemId int NOT NULL IDENTITY (1, 1),
    SpecialItemId int NULL,
    IsSpecialItem AS
        CAST(CASE ISNULL(SpecialItemId, 0) WHEN 0 THEN 0 ELSE 1 END AS bit)
)

Andere Tipps

Mark Byers Antwort einen Fehler mit nvarchar Spalten verursacht, die folgenden Werke unabhängig davon, ob Spalte int oder nvarchar:

CREATE TABLE dbo.Item
(
    ItemId int NOT NULL IDENTITY (1, 1),
    SpecialItemId [nvarchar](50) NULL,
    CAST(CASE WHEN SpecialItemId Is NULL THEN 0 ELSE 1 END AS bit)
      AS IsSpecialItem 
)

SQL Server hat keine nativen wahren Booleschen Datentyp (in dem Sinne, dass Sie eine Variable anstelle eines booleschen Ausdrucks, wie select * from Item where IsSpecialItem verwenden könnte). Die einzige Möglichkeit, es ist mit so etwas wie Mark darstellen schlägt vor, reservierte Werte (in diesem Fall Ihre Anfrage select * from Item where IsSpecialItem = 1 würde).

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