Calculé colonne de bits qui indique si une autre colonne est nulle
-
13-09-2019 - |
Question
J'essaie d'avoir cette colonne calculée:
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]
La solution
Cela fonctionne:
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)
)
Autres conseils
réponse de Mark Byer provoque une erreur avec des colonnes de nvarchar
, les travaux suivants, peu importe si la colonne est int
ou 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 ne possède pas de type de données booléen vrai natif (dans le sens que vous pouvez utiliser une variable à la place d'une expression booléenne, comme select * from Item where IsSpecialItem
). La seule façon que vous pouvez représenter est avec quelque chose comme Mark suggère, en utilisant des valeurs réservées (dans ce cas, votre requête sera select * from Item where IsSpecialItem = 1
).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow