我正在尝试使用它FOR XML
来模拟 OData 提要。我的要求之一是在某个地方我需要一个对所有记录都是不变的 XML 元素;我打算为此使用XMLTEXT 指令。
我的 XML 需要看起来像这样;对于数据库中的每条记录,
<entry>
<id>1</id>
<test type="dummy" />
<!-- some more nested elements -->
</entry>
当我使用以下查询时,<test>
元素出现在元素之前,<id>
即使声明出现在它之后:
CREATE TABLE #temp (id int);
INSERT INTO #temp VALUES (1), (2);
SELECT
1 AS Tag,
NULL AS Parent,
id AS [entry!1!id!ELEMENT],
'<test type="dummy" />'
AS [entry!1!test!XMLTEXT]
-- other columns
FROM #temp
FOR XML EXPLICIT;
DROP TABLE #temp;
这给出了以下结果(fiddle):
<entry>
<test type="dummy"/>
<id>1</id>
</entry>
我在这里做错了什么,还是这是 XMLTEXT 的限制?一种解决方法可能是将其视为常规嵌套元素,但即使我在元素的更下方有更多嵌套元素,这是否可行<entry>
?
经过更多的调整后,我发现有一个 XML 指令可以完成这项工作(如果我省略属性名称,
test
):这会产生我想要的结果:
(演示)
此处简要提及了该指令,但我找不到更多文档或任何示例。
如果您出于某种原因不需要
for xml explicit
,您可以使用for xml path
我认为更容易处理的方法。您可以将字符串文字转换为 XML
或者你可以将它设置为一个值