以下の構文を理解しようとしています。私はこれにいくつかの助けを得ることはできますか?COALESCEの構文の理解
DECLARE @StringList VARCHAR(2500);
SELECT COALESCE(@StringList + ',','') + CAST(apID as VARCHAR) AS ApIdList FROM testTable
以下の構文を理解しようとしています。私はこれにいくつかの助けを得ることはできますか?COALESCEの構文の理解
DECLARE @StringList VARCHAR(2500);
SELECT COALESCE(@StringList + ',','') + CAST(apID as VARCHAR) AS ApIdList FROM testTable
その結果、最初のパラメータが2番目のパラメータが返されますNULL
ある場合はVARCHAR
COALESCE
チェックにtestTable
からすべてのapID
を取得します。この行では@StringList
は常にあるのでNULL
COALESCE(@StringList + ',','')
等しく、NULL + ',' = NULL
あなたは(''
)
その後empty string + CAST(apID as VARCHAR)
空の文字列を取得し、
合体は、最初の非を返すapID
VARCHAR
としてあなたが得ます指定された要素に含まれるnull要素-https://msdn.microsoft.com/en-us/library/ms190349.aspxを参照してください。
あなたのケースでは、@StringListがnullでない場合、testTableの各行のappIDの前にコンマが追加されます。
コードでは、ApID
がテーブルのすべての行の文字列として返されます。どうして? @StringList
はNULL
なので、最初の式は''
と評価され、2番目の式はテーブルの一部の行のApId
の文字列表現になります。
VARCHAR
への変換について、私は注意します。これをしないでください!デフォルトの長さは文脈によって異なり、長さなしでは非常に難しいデバッグエラーを導入することができます。
関連表現がより一般的ですが、私は思う:
SELECT @StringList = COALESCE(@StringList + ',', '') + CAST(apID as VARCHAR(8000)) AS ApIdList
FROM testTable;
これは、文字列の連結を行い、そのapID
のすべての値がカンマ区切りの文字列に連結されます。
これは、結果セットをループして変数を割り当てることです。このタイプの変数の複数の行への割り当てはお勧めしません。 SQL Serverが実際に動作することは保証されているとは言えませんが(つまり、文書化された機能です)、実際にはすべてのバージョンで動作するようです。