计算位列,返回另一列是否为空

Shi*_*mmy 9 null sql-server-2005 calculated-columns isnull

我尝试使用此计算列:

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]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 16

这有效:

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)
)
Run Code Online (Sandbox Code Playgroud)

  • 这仅在被测试的列是数字时有效.如果SpecialItemId是nvarchar并且具有值,则会导致错误.看到我的其他答案 (4认同)

Gar*_*ett 14

马克·拜尔的回答会导致一个错误nvarchar的列,下面的作品,无论列是否是intnvarchar:

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 
)
Run Code Online (Sandbox Code Playgroud)