Какво FOR XML PATH('xxx')
прави, е да създаде XML низ за набора от резултати, който поставя всеки ред в <xxx></xxx>
елемент и всяка стойност на колона вътре в реда, в елемент с името на тази колона.
Ако 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) ...
- CAST колоната към нейния тип:
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('');