SQLServerでカンマ区切り (CSV) で文字列取得

Where句のINにSQLで取得した結果を直接利用したりするのに、SQLServerで複数件存在するデータを1行のカンマ区切りのデータとして取得して見ます。

スポンサーリンク

SQLの取得結果をカンマ区切りで取得

Where句のINにSQLで取得した結果を直接利用したりするのに、SQLServerで複数件存在するデータを1行のカンマ区切りのデータとして取得して見ます。
(残念ですがOracleやMySQLなどではこの方法は通用しません。)

取得

カンマ区切りで取得するには列名を「data()」にすることでアトミック値として処理し、その結果を「FOR XML PATH」を利用して細工します。

取得結果

RESULT
太郎さん,次郎さん,三郎さん

取得した結果でカンマ区切り (CSV)ファイルを作成するには便利です。

補足

カラムに付けている別名「data()」ですが、
パスを data() として指定した列の名前を参照すると


列名として指定したパスが “data()” の場合、生成されるXMLでは列の値がアトミック値として処理されます。

とあり、「data()」を他の名称「aaa()」のように変えると

RESULT
太郎さん
次郎さん
三郎さん

のように普通に取得してしまいます。

不可分操作 - Wikipedia

不可分操作(ふかぶんそうさ)あるいはアトミック操作 (Atomic Operation) とは、情報工学においていくつかの操作を組み合わせたもので、システムの他の部分から見てそれらがひとつの操作に見えるものをいう。


と言うことで、SELECT結果が複数件あっても1つの操作の結果に見えると。

う~ん、難しい。

タイトルとURLをコピーしました