SQL Server 2012試験のドキュメントを読んでいるだけで、次の点がわかりました。
ケースvs isnull vs合体
今、私が知っているどのようにそれぞれのいずれかを使用するが、私は知らないWHEN各1を使用します。いくつかの体を明確にしてください。ありがとう。
Ps。試験問題のタグを付けていただけませんか?
SQL Server 2012試験のドキュメントを読んでいるだけで、次の点がわかりました。
ケースvs isnull vs合体
今、私が知っているどのようにそれぞれのいずれかを使用するが、私は知らないWHEN各1を使用します。いくつかの体を明確にしてください。ありがとう。
Ps。試験問題のタグを付けていただけませんか?
回答:
ISNULL -SQL Serverでのみ使用できます。NULL値をテストして、相互に置き換えることができます。
COALESCE -ANSI規格。可変長の引数のセットで、NULL値をテストして最初の非null値で置き換えることができます。データ型の優先順位がこれに影響を与えることに注意することが重要です
-- Conversion failed when converting the varchar value 'a' to data type int
SELECT COALESCE(CAST(NULL AS varchar(10)), 'a', 1)
-- Returns 1
SELECT COALESCE(CAST(NULL AS varchar(10)), 1, 'a')
上記の例では、「a」が最初の非null値ですが、文字データは整数よりも優先順位が低くなっています。
ISNULLとCOALESCEのもう1つの考慮事項は、COALESCE呼び出しの結果はNULL可能である一方で、ISNULLの結果はNOT NULLであると判断されることです。JRJの投稿ISNULL()<> COALESCE()を参照することは簡単なことのように思えるかもしれませんが、クエリオプティマイザーは列のNULL可能性に基づいてさまざまな計画を作成できます。
isnull / coalesce / case式のnull 可能性は、dmo sys.dm_exec_describe_first_result_setを介して実行することで簡単にテストできます
-- these all evaluate to not nullable (is_nullable = 0) because I'm not clever enough
DECLARE @sql nvarchar(4000) = N'
SELECT ISNULL(NULL, 1) AS I
, COALESCE(NULL, 1) AS C
, CASE WHEN NULL = NULL THEN NULL ELSE 1 END AS C1
'
SELECT
DMO.*
FROM
sys.dm_exec_describe_first_result_set(@sql, NULL, 0) AS DMO
CASE -ANSI標準のスカラー関数。単純なスカラーで表現できないテストがある場合、前の2つに比べてCASEを使用することを検討しますが、それはかなり弱い答えです、と私は認めます。
COALESCE
。ありがとうございました
CASE
技術的には式ではなく、関数です。
COALESCE
に拡張されてCASE
いますが、明らかにCASE
自分で記述したステートメントでは、WHEN
条件により柔軟に対応できます。以下のためにISNULL
対COALESCE
関連/複製?