Domanda

Io cerco di avere questa colonna calcolata:

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]
È stato utile?

Soluzione

Questo funziona:

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)
)

Altri suggerimenti

Byer causa un errore con colonne nvarchar, le seguenti opere indipendentemente dal fatto che colonna è int o 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 non ha alcun vero tipo di dati booleano nativo (nel senso che si potrebbe usare una variabile al posto di un'espressione booleana, come select * from Item where IsSpecialItem). L'unico modo è possibile rappresentare sia con qualcosa come Mark suggerisce, utilizzando i valori riservati (in questo caso, la query sarebbe select * from Item where IsSpecialItem = 1).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top