Pergunta

Eu tento ter esta coluna computada:

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

Solução

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

Outras dicas

A resposta de

Mark Byer causa um erro com colunas nvarchar, as seguintes obras independentemente de coluna é 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 não tem qualquer verdadeiro tipo de dados boolean nativa (no sentido de que você poderia usar uma variável no lugar de uma expressão booleana, como select * from Item where IsSpecialItem). A única maneira que você pode representá-lo é com algo parecido com Mark sugere, usando valores reservados (neste caso, sua consulta seria select * from Item where IsSpecialItem = 1).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top