什么是XML路径?

时间:2017-10-11 08:39:54

标签: sql-server sql-server-2014

有人可以详细解释实际上SELECT (STUFF SELECT...))FOR XML PATH(''), TYPE).value('.','NVARCHAR(max)')

的内容

据我所知: XmlPath('')将列数据连接成一行。 Stuff 用于删除字符串连接后的第一个','

那么TYPE).value('.','NVARCHAR(max)')用于什么?

1 个答案:

答案 0 :(得分:1)

  

那么TYPE).value('.','NVARCHAR(max)')用于什么?

FOR XML PATH的基础知识,您可以在SO上找到很多问题/答案(例如12)。

我将专注于TYPE指令。请考虑以下T-SQL语句,该语句连接派生表dt中的字符串:

SELECT
    [text()]=dt.x+';'
FROM
    (
        VALUES('text > blabla'),
              ('text < blabla'),
              ('f&m')
    ) AS dt(x)
FOR XML
    PATH('');

结果是:

text &gt; blabla;text &lt; blabla;f&amp;m;

您会看到><&&gt;&lt;&amp;取代。特殊字符(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特殊字符未被替换。