Pregunta

Trato de tener esta columna calculada:

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]
¿Fue útil?

Solución

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

Otros consejos

La respuesta de Marcos Byer provoca un error con columnas nvarchar, 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 
)

SQL Server no tiene ningún tipo de datos booleano verdadero nativo (en el sentido de que se puede utilizar una variable en lugar de una expresión booleana, como select * from Item where IsSpecialItem). La única manera que puede representar que es algo así como la marca sugiere, utilizando los valores reservados (en este caso, sería select * from Item where IsSpecialItem = 1 la consulta).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top