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列でエラーを引き起こします。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 
)
于 2012-06-27T09:15:58.190 に答える
2

SQL Server には、ネイティブの真のブール データ型はありません (ブール式の代わりに変数を使用できるという意味でselect * from Item where IsSpecialItem)。それを表現できる唯一の方法は、マークが提案するようなものを使用して、予約済みの値を使用することです (この場合、クエリは になりますselect * from Item where IsSpecialItem = 1)。

于 2009-12-06T04:41:37.830 に答える