有人可以详细解释实际上SELECT (STUFF SELECT...))FOR XML PATH(''), TYPE).value('.','NVARCHAR(max)')
据我所知:
XmlPath('')
到将列数据连接成一行。
Stuff
用于删除字符串连接后的第一个','
那么TYPE).value('.','NVARCHAR(max)')
用于什么?
答案 0 :(得分:1)
那么
TYPE).value('.','NVARCHAR(max)')
用于什么?
FOR XML PATH
的基础知识,您可以在SO上找到很多问题/答案(例如1或2)。
我将专注于TYPE
指令。请考虑以下T-SQL语句,该语句连接派生表dt
中的字符串:
SELECT
[text()]=dt.x+';'
FROM
(
VALUES('text > blabla'),
('text < blabla'),
('f&m')
) AS dt(x)
FOR XML
PATH('');
结果是:
text > blabla;text < blabla;f&m;
您会看到>
,<
和&
被>
,<
和&
取代。特殊字符(XML预定义实体)将被替换。
您可以通过指定TYPE
指令来禁用它,该指令将其导出为XML而不是文本,然后从XML获取字符串值。从生成的XML中获取此字符串值可以使用value()
方法完成。
使用上例中的TYPE
指令:
SELECT
(
SELECT
[text()]=dt.x+';'
FROM
(
VALUES('text > blabla'),
('text < blabla'),
('f&m')
) AS dt(x)
FOR XML
PATH(''), TYPE
).value('.','NVARCHAR(MAX)');
你得到:
text > blabla;text < blabla;f&m;
您可以看到XML特殊字符未被替换。