計算列がNULL可能でないようにする方法?
-
20-09-2019 - |
質問
これまでのところ私は(むしろ、デフォルト値を呼び出しますが、何でも)それはNULL不可能にするためにISNULL(dbo.fn_GetPrice(ItemId), 0)
を使用してきた。
これは正しい方法ですか?
解決
はい、それはそれを行うには正しい方法です。 isnull
機能を使用することによって、あなたは、どんな値を返さないしなければならない式を作成しています。これはnot null
で計算列であることをSQL Serverで評価されます。
他のヒント
私は、ANSI標準のCOALESCE関数を好むだろうが、ISNULLは大丈夫です。 COALESCEを使用するには、計算列を定義します。
COALESCE(dbo.fn_GetPrice(ItemId), 0)
編集何か新しい日常をご覧ください。私は次のようでした。
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
とC2は、sp_helpはに従って実際にNULL可能ではありませんが、C4は、式がNULL値になる可能性が合体する方法がないにも関わらず、NULL可能であると報告されています。
また、2008年のように、私はオプションは、2005年に存在しているかどうかわからない、一つは計算列を保持し、制約を追加することができます:
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)
制約違反で結果。
所属していません StackOverflow