SQL表中的XML-SQL Server
我是XML新手,任务是从表中生成类似于以下内容的XML: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
<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')