Come rendere colonna calcolata non annullabile?
-
20-09-2019 - |
Domanda
Finora ho usato ISNULL(dbo.fn_GetPrice(ItemId), 0)
per renderlo non annullabile (piuttosto chiamano di valore predefinito, ma qualunque).
E 'questo il modo giusto?
Soluzione
Sì, questo è il modo giusto per farlo. Utilizzando la funzione isnull
si sta creando un'espressione che deve restituire un valore, non importa quale. Questo è valutato da SQL Server ad essere una colonna calcolata che è not null
.
Altri suggerimenti
Io preferirei la funzione COALESCE standard ANSI, ma ISNULL va bene. Per usare COALESCE, definire la colonna calcolata come:
COALESCE(dbo.fn_GetPrice(ItemId), 0)
Modifica Imparare qualcosa di nuovo ogni giorno. Ho fatto la seguente:
create table t (c1 int null
, c2 as isnull(c1, 1)
, c3 as isnull(c1, null)
, c4 as coalesce(c1, 1)
, c5 as coalesce(c1, null)
)
exec sp_help t
E c2 effetti non è annullabile secondo sp_help, ma c4 viene segnalato come Null, anche se non c'è modo che coagulano espressione potrebbe risultare in un valore nullo.
Inoltre a partire dal 2008, non so se l'opzione esiste, nel 2005, si può persistere una colonna calcolata e aggiungere un vincolo:
create table t (c1 int null
, c2 as isnull(c1, 1) persisted not null
, c3 as isnull(c1, null) persisted not null
, c4 as coalesce(c1, 1) persisted not null
, c5 as coalesce(c1, null) persisted not null
)
go
insert into t (c1) values (null)
si traduce in una violazione del vincolo.