2009-12-06 10 views

risposta

15

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

Questo funziona solo quando la colonna in prova è numerico. Se SpecialItemId è nvarchar e ha un valore, questo provoca un errore. Vedi la mia altra risposta –

2

SQL Server non ha alcun vero tipo di dati booleano nativo (nel senso che è possibile utilizzare una variabile al posto di un'espressione booleana, ad esempio select * from Item where IsSpecialItem). L'unico modo in cui puoi rappresentarlo è con qualcosa come suggerisce Mark, usando valori riservati (in questo caso la tua query sarebbe select * from Item where IsSpecialItem = 1).

10

Mark Byer's answer causa un errore con nvarchar colonne, i seguenti lavori indipendentemente dal fatto 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 
)