coluna bit computada que retorna se outra coluna é nulo
-
13-09-2019 - |
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]
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