防止SQL Sever在XML中生成自关闭标记

Gar*_*ang 2 xml t-sql sql-server

使用以下SQL:

DECLARE @xml XML=
(
    SELECT 
      N'' AS [content1/\*]
    , N'' AS [content2/\*]
    FOR XML PATH('Rows')
)

SELECT @xml 
Run Code Online (Sandbox Code Playgroud)

我得到自我关闭的标签,如:

<Rows>
  <content1 />
  <content2 />
</Rows>
Run Code Online (Sandbox Code Playgroud)

是否有可能得到这个,在HTML中使用?

<Rows>
  <content1></content1>
  <content2></content2>
</Rows>
Run Code Online (Sandbox Code Playgroud)

此外,是否可能,即没有根节点?

<content1></content1>
<content2></content2>
Run Code Online (Sandbox Code Playgroud)

Luk*_*zda 5

您可以使用TYPE指令来避免隐式转换为字符串并返回XML:

DECLARE @xml XML= 
  (SELECT N'' as [content1],
          N'' as [content2] 
   FOR XML PATH('Rows'), TYPE);

SELECT @xml;
Run Code Online (Sandbox Code Playgroud)

LiveDemo

输出:

<Rows><content1></content1><content2></content2></Rows>
Run Code Online (Sandbox Code Playgroud)

如果可能的话?

<content1></content1>
<content2></content2> 
Run Code Online (Sandbox Code Playgroud)

意味着没有根节点.

DECLARE @xml XML= 
  (SELECT N'' as [content1], N'' as [content2] FOR XML PATH(''), TYPE);

SELECT @xml;
Run Code Online (Sandbox Code Playgroud)

LiveDemo2

输出:

<content1></content1><content2></content2>
Run Code Online (Sandbox Code Playgroud)