SQL表中的XML-SQL Server

SQL表中的XML-SQL Server,sql,sql-server,xml,tsql,Sql,Sql Server,Xml,Tsql,我是XML新手,任务是从表中生成类似于以下内容的XML: <A> <a1>1</a1> <a2>2</a2> <a3 type="xyz">abc</a3> <B> <b1>11</b1> <b2 ID ="b2_product" name="clothing" > <c1> <d1 type

我是XML新手,任务是从表中生成类似于以下内容的XML:

<A>
<a1>1</a1>
<a2>2</a2>
<a3 type="xyz">abc</a3>
<B>
    <b1>11</b1>
    <b2 ID ="b2_product" name="clothing" >
        <c1>
            <d1 type = "xlr1">d11</d1>
            <d1 type = "xlr2">d12</d1>
        </c1>
    </b2>
</B>

如何编写SQL以仅以给定的XML格式从此表生成XML。

您可能需要以下内容:

DECLARE @tbl TABLE(
a1 int,a2 int, a3_type varchar(10),a3 varchar(10),b1 int,b2_ID varchar(10),b2_name varchar(10),xlr1 varchar(10),xlr2 varchar(10))
INSERT INTO @tbl VALUES
(1,2,'xyz','abc',11,'b2_product','clothing','d11','d12');

SELECT a1 
      ,a2
      ,a3_type AS [a3/@type]
      ,a3 
      ,b1 AS [B/b1]
      ,b2_ID AS [B/b2/@ID]
      ,b2_name AS [B/b2/@name]
      ,xlr1 AS [B/b2/c1/d1]
FROM @tbl 
FOR XML PATH('A')
结果

<A>
  <a1>1</a1>
  <a2>2</a2>
  <a3 type="xyz">abc</a3>
  <B>
    <b1>11</b1>
    <b2 ID="b2_product" name="clothing">
      <c1>
        <d1>d11</d1>
      </c1>
    </b2>
  </B>
</A>

1.
2.
abc
11
d11
更新 您编辑了您的问题:这是新的查询

SELECT a1 
      ,a2
      ,a3_type AS [a3/@type]
      ,a3 
      ,b1 AS [B/b1]
      ,b2_ID AS [B/b2/@ID]
      ,b2_name AS [B/b2/@name]
      ,'xlr1' AS [B/b2/c1/d1/@type] 
      ,xlr1 AS [B/b2/c1/d1]
      ,'' AS [B/b2/c1]                --needed to start a new <d1>
      ,'xlr2' AS [B/b2/c1/d1/@type] 
      ,xlr2 AS [B/b2/c1/d1]

FROM @tbl 
FOR XML PATH('A')
选择a1
,a2
,a3_类型为[a3/@type]
,a3
,b1为[B/b1]
,b2_ID为[B/b2/@ID]
,b2_名称为[B/b2/@name]
“xlr1”作为[B/b2/c1/d1/@类型]
,xlr1为[B/b2/c1/d1]
,“”作为[B/b2/c1]--需要启动新的
“xlr2”作为[B/b2/c1/d1/@类型]
,xlr2为[B/b2/c1/d1]
来自@tbl
对于XML路径('A')

非常感谢Sgnugo……这正是我想要的。。。。你能分享一些资源或链接吗?我可以在那里更详细地研究一下……因为通常每当我搜索时,它都不会提供这种详细的资料……@KMittal Thx!最好从MS文档和链接开始。有没有办法将xlr1的名称更改为x1,将xlr2的名称更改为x2…即。d11d12@JFI此数据是一个文本字符串
'xlr1'
,您可以将任何字符串放在那里,您会发现这是
@type
的内容。如果我们有一个xsd,是否可以使用sql查询从同一个表生成类似的xml,而不会使它变得如此复杂。。。。比如使用Openrowset?
SELECT a1 
      ,a2
      ,a3_type AS [a3/@type]
      ,a3 
      ,b1 AS [B/b1]
      ,b2_ID AS [B/b2/@ID]
      ,b2_name AS [B/b2/@name]
      ,'xlr1' AS [B/b2/c1/d1/@type] 
      ,xlr1 AS [B/b2/c1/d1]
      ,'' AS [B/b2/c1]                --needed to start a new <d1>
      ,'xlr2' AS [B/b2/c1/d1/@type] 
      ,xlr2 AS [B/b2/c1/d1]

FROM @tbl 
FOR XML PATH('A')