2009-12-06 5 views

ответ

15

Это работает:

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

Это работает только когда колонна испытывается является числовым. Если SpecialItemId является nvarchar и имеет значение, это вызывает ошибку. См. Мой другой ответ –

2

SQL Server не имеет нативный истинный логический типа (в том смысле, что вы можете использовать переменную вместо булевского выражения, например select * from Item where IsSpecialItem). Единственный способ, которым вы можете представить это, - это что-то вроде предложения Mark, используя зарезервированные значения (в этом случае ваш запрос будет select * from Item where IsSpecialItem = 1).

10

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 
) 
Смежные вопросы