Вычисляемый битовый столбец, который показывает, является ли другой столбец нулевым.
-
13-09-2019 - |
Вопрос
Я пытаюсь получить этот вычисляемый столбец:
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]
Решение
Это работает:
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)
)
Другие советы
Ответ Марка Байера вызывает ошибку с nvarchar
столбцы, следующее работает независимо от того, является ли столбец int
или 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 не имеет собственного истинного логического типа данных (в том смысле, что вы можете использовать переменную вместо логического выражения, например select * from Item where IsSpecialItem
).Единственный способ представить это — использовать что-то вроде Марка, используя зарезервированные значения (в этом случае ваш запрос будет выглядеть так: select * from Item where IsSpecialItem = 1
).
Не связан с StackOverflow