FOR XML PATH('xxx')
各行を<xxx></xxx>
に配置する結果セットのXML文字列を作成します 要素と、その列の名前を持つ要素内の行内の各列の値。
PATHが空の場合(つまり、PATH('')
)XML生成の行要素を省略します。列に名前がない場合は、XML生成の列要素が省略されます。両方のPATHが空で、列に名前がない場合、事実上、すべての行の文字列連結になります。
次のステートメントを実行して、プロセスの洞察を深めます。
-- Each row is in a <beta></beta> element
-- Each column in that row in a <alfa></alfa> element (the column name)
SELECT
alfa=','+TABLE_SCHEMA + '.' + TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
FOR
XML PATH('beta');
-- Since the PATH is empty, the rows are not put inside an element
-- Each column in that row is in a <alfa></alfa> element (the column name)
SELECT
alfa=','+TABLE_SCHEMA + '.' + TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
FOR
XML PATH('');
-- Since the PATH is empty, the rows are not put inside an element
-- Since the column has no name it is not put inside an element
SELECT
','+TABLE_SCHEMA + '.' + TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
FOR
XML PATH('');
-- This uses the STUFF function to remove the leading comma to get a proper comma-seperated list
SELECT STUFF((
SELECT
','+TABLE_SCHEMA + '.' + TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
FOR
XML PATH('')
),1,1,''
) AS comma_seperated_list;
テーブルから列を選択するだけで、列名を削除するにはどうすればよいですか。私の好みの順に、いくつかの方法があります:
- XQueryプロパティ:
SELECT [text()]=column_name ...
- サブクエリを使用して列の値を選択します:
SELECT (SELECT column_name) ...
- 列をそのタイプにキャストします:
SELECT CAST(column_value AS <TYPE of the column>) ...
例:
SELECT
[text()]=TABLE_NAME
FROM
INFORMATION_SCHEMA.TABLES
FOR
XML PATH('');
SELECT
(SELECT TABLE_NAME)
FROM
INFORMATION_SCHEMA.TABLES
FOR
XML PATH('');
SELECT
CAST(TABLE_NAME AS SYSNAME)
FROM
INFORMATION_SCHEMA.TABLES
FOR
XML PATH('');