columna de bits calculado que indica si otra columna es nulo
-
13-09-2019 - |
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]
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