似乎对“根”和“元素”有些混淆。在 XML 中,根是树顶部的单个节点。
如果我们指定 FOR XML PATH 之后没有任何内容,那么我们会得到一组名为“Row”的 XML 元素。这是默认名称。
USE AdventureWorks2016CTP3;
GO
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
WHERE BusinessEntityID BETWEEN 14500 AND 14502
FOR XML PATH;
我们可以像这样为封闭的 XML 元素指定一个不同的名称。
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
WHERE BusinessEntityID BETWEEN 14500 AND 14502
FOR XML PATH('Person');
如果我们希望 XML 元素包含在顶级根元素中,我们可以这样指定。
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
WHERE BusinessEntityID BETWEEN 14500 AND 14502
FOR XML PATH('Person'),
ROOT('People');
为元素名称指定一个空字符串会导致它忽略封闭的 XML 元素。这似乎是一件很奇怪的事情。我无法想象为什么有人愿意这样做。
SELECT BusinessEntityID, FirstName, LastName
FROM Person.Person
WHERE BusinessEntityID BETWEEN 14500 AND 14502
FOR XML PATH('');
但是 Books Online 确实说这是正确的行为。请参阅 FOR XML 子句的基本语法 > https://msdn.microsoft.com/en-gb/library/ms190922.aspx > 参数 > PATH。
如果您提供空字符串(FOR XML PATH ('')),则不会生成包装元素。