2016-07-07 19 views
0

私はウェブサイト上で見つけると、私はちょうどこのまわりで私の脳を得ることができないいくつかのコードを使用しています。このSQL COALESCE関数はどのように機能しますか?

SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']', 
      '[' + CONVERT(NVARCHAR, [DATE], 106) + ']') 
      FROM (SELECT DISTINCT [DATE] FROM #DailyReport) PV order by [DATE] 

それは

[02 May 2016],[03 May 2016],[04 May 2016],[05 May 2016],[06 May 2016],[08 May 2016],[09 May 2016],[10 May 2016],[11 May 2016],[12 May 2016],[13 May 2016],[15 May 2016],[16 May 2016],[17 May 2016],[18 May 2016],[19 May 2016],[20 May 2016],[22 May 2016],[23 May 2016],[24 May 2016],[25 May 2016],[26 May 2016],[27 May 2016],[29 May 2016],[30 May 2016],[31 May 2016] 

を返しますが、それがどのように動作しますか?私はすべてのそれらの列を持って、どのように私は理解したい2つの「[」+ CONVERT(NVARCHAR、[DATE]、106)+「]」フレーズがある理由。あなたが指摘

答えて

2

2つの句は、単純にそうcoalesce()作品です。ロジックを書くための簡単な方法があります。おそらくこれは、何が起こるかを説明するのに役立ちますあなたの場合は

SELECT @cols = COALESCE(@cols + ',', '') + '[' + CONVERT(NVARCHAR(255), [DATE], 106) + ']', 
FROM (SELECT DISTINCT [DATE] FROM #DailyReport 
    ) PV 
ORDER BY [DATE]; 

を、完全な連結はCOALESCE()の最初の引数であるので、式は最初の引数として必要とされています。しかし、それがNULLならば、それは再び必要です。

注:使用使用VARCHAR()NVARCHAR()またはSQL Server内の任意の文字の種類は、あなたが常には、長さ指定を含める必要があります。デフォルトの長さはコンテキストによって異なりますが、デフォルト値が十分に大きくない場合、バグは追跡するのが非常に難しい場合があります。

関連する問題