SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server v.Next の STRING_AGG でテーブルの列情報を簡単に一覧化してみる

leave a comment

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'

これにより、このような結果を取得することができます。
image
これを 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'

image
CROSS / OUTER APPLY と組み合わせるとこのようなデータの作成が楽になりそうですね。

Share

Written by Masayuki.Ozawa

3月 12th, 2017 at 8:23 pm

Posted in SQL Server

Tagged with

Leave a Reply