SQL Server v.Next では、いくつかの文字列関数が追加されています。
STRING_AGG (Transact-SQL)
CONCAT_WS (Transact-SQL)
TRANSLATE (Transact-SQL)
TRIM (Transact-SQL)
STRING_AGG を使用すると、今までの「FOR XML PATH(”)」で列のリストを作っていたものなどが簡単に単一の列に含めることができるようになりますので軽く紹介を。
STRING_AGG は SQL Database でも使用できるようになっています。
従来までは、以下のようなクエリで一行にデータをまとめていたかと思います。
SELECT o.name, STUFF(c.name, LEN(c.name), LEN(c.name), '') FROM sys.objects o CROSS APPLY (SELECT name + '|' FROM sys.columns WHERE object_id = o.object_id FOR XML PATH('') ) C(name) WHERE type = 'U'
これにより、このような結果を取得することができます。
これを STRING_AGG に変更すると以下のように書くことができます。
SELECT o.name, c.name FROM sys.objects o CROSS APPLY (SELECT STRING_AGG(name, '|') name FROM sys.columns WHERE object_id = o.object_id) C WHERE type = 'U'