colonna di bit calcolato che restituisce se un'altra colonna è nullo
-
13-09-2019 - |
Domanda
Io cerco di avere questa colonna calcolata:
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]
Soluzione
Questo funziona:
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)
)
Altri suggerimenti
Byer causa un errore con colonne nvarchar
, le seguenti opere indipendentemente dal fatto che colonna è int
o 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
)
SQL Server non ha alcun vero tipo di dati booleano nativo (nel senso che si potrebbe usare una variabile al posto di un'espressione booleana, come select * from Item where IsSpecialItem
). L'unico modo è possibile rappresentare sia con qualcosa come Mark suggerisce, utilizzando i valori riservati (in questo caso, la query sarebbe select * from Item where IsSpecialItem = 1
).
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow