2009-12-06 19 views

Respuesta

15

Esto funciona:

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

Esto sólo funciona cuando la columna que se está probando es numérico. Si SpecialItemId es nvarchar y tiene un valor, esto provoca un error. Ver mi otra respuesta –

2

SQL Server no tiene ningún tipo de datos booleano verdadero nativo (en el sentido de que podría usar una variable en lugar de una expresión booleana, como select * from Item where IsSpecialItem). La única forma en que puede representarlo es con algo como sugiere Mark, utilizando valores reservados (en este caso, su consulta sería select * from Item where IsSpecialItem = 1).

10

Mark Byer's answer provoca un error con nvarchar columnas, las siguientes obras independientemente de si la columna es 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 
) 
Cuestiones relacionadas