【问题标题】:Computed bit column that returns whether another column is null返回另一列是否为空的计算位列
【发布时间】:2010-12-23 16:26:12
【问题描述】:

我尝试使用这个计算列:

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]

【问题讨论】:

    标签: sql-server-2005 null calculated-columns isnull


    【解决方案1】:

    这行得通:

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

    【讨论】:

    • 这仅在被测试的列是数字时有效。如果 SpecialItemId 是 nvarchar 并且有一个值,那么这会导致错误。查看我的其他答案
    【解决方案2】:

    Mark Byer's answer 导致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 
    )
    

    【讨论】:

      【解决方案3】:

      SQL Server 没有任何本机真正的布尔数据类型(从某种意义上说,您可以使用变量代替布尔表达式,例如select * from Item where IsSpecialItem)。您可以表示它的唯一方法是使用 Mark 建议的方法,使用保留值(在这种情况下,您的查询将是 select * from Item where IsSpecialItem = 1)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-13
        • 2010-12-23
        • 2021-07-15
        相关资源
        最近更新 更多