Вычисляемый битовый столбец, который показывает, является ли другой столбец нулевым.

StackOverflow https://stackoverflow.com/questions/1854346

Вопрос

Я пытаюсь получить этот вычисляемый столбец:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top