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]
Était-ce utile?

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
scroll top