我尝试有此计算列:

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列,下面的作品不管列是否是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 
)

SQL Server没有(因为你可以代替布尔表达式中使用变量,像select * from Item where IsSpecialItem的意义上)的任何原生真布尔数据类型。你可以代表它的唯一方法是使用像马克建议,使用保留的值(在这种情况下,您的查询将被select * from Item where IsSpecialItem = 1)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top