Jan*_*eYu 5 t-sql sql-server for-xml-path
FOR XML PATH ('')在SQL Server中连接行时,该子句如何工作?
我只想解释该FOR XML PATH ('')条款的工作原理......
TT.*_*TT. 16
是什么FOR XML PATH('xxx')做的是创建为使每行中的结果集的XML字符串<xxx></xxx>元素和行内的每个列的值,在元素的名称该列.
如果PATH为空(即PATH(''))它省略了XML生成中的row元素.如果列没有名称,则省略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;
Run Code Online (Sandbox Code Playgroud)
现在我听到你问:当我只是从表中选择一列时,如何删除列名.根据我的偏好,有几种方法:
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('');
Run Code Online (Sandbox Code Playgroud)