2009-12-06 7 views

Antwort

15

Dies funktioniert:

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

Dies funktioniert nur, wenn die Säule getestet wird numerisch ist. Wenn SpecialItemId nvarchar ist und einen Wert hat, verursacht dies einen Fehler. Siehe meine andere Antwort –

2

SQL Server hat keine nativen wahre boolean-Datentyp (in dem Sinne, dass Sie eine Variable anstelle eines booleschen Ausdrucks verwenden könnten, wie select * from Item where IsSpecialItem). Der einzige Weg, den Sie darstellen können, ist etwas, wie Mark es vorschlägt, mit reservierten Werten (in diesem Fall wäre Ihre Abfrage select * from Item where IsSpecialItem = 1).

10

Mark Byer's answer verursacht einen Fehler mit nvarchar Spalten, die folgenden Werke unabhängig davon, ob Spalte int oder 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 
) 
Verwandte Themen