Berechnete Bit-Spalte, die zurückgibt, ob eine andere Spalte null ist
-
13-09-2019 - |
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]
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