11

我尝试有这个计算列:

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]
4

3 回答 3

19

这有效:

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)
)
于 2009-12-06T04:35:13.520 回答
17

Mark Byer 的回答会导致列错误,nvarchar无论 column 是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 
)
于 2012-06-27T09:15:58.190 回答
2

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

于 2009-12-06T04:41:37.830 回答