SQL Table 结果是 xml 输出
SQL Table result in a xml output
我有一个table
Key code
1 100
1 200
1 300
1 400
2 100
2 200
2 300
我正在用键在一行中查找我的结果,在另一行中查找结果 XML_data
Key XML_Data(XML column)
1 <sub><key>1...
2 <sub><key>2...
XML_Data 示例:
<sub>
<key> 1 </Key>
<list>
<code> 100 </code>
<code> 200 </code>
<code> 300 </code>
<code> 400 </code>
</list>
</sub>
谢谢
您没有详细说明 XML 在哪里等等,但一般来说,以下查询应该对您的情况有所帮助。
INSERT INTO dbo.YourTable
(key, xml_data)
VALUES
(KEY, CONVERT(XML, N'YOUR_XML', 2));
您可以更进一步,通过将 XML 声明为变量,从 XML 中提取您的 KEY,并根据整个变量添加到第 2 列 XML。
DECLARE @input XML = '<sub>
<key> 1 </key>
<list>
<code> 100 </code>
<code> 200 </code>
<code> 300 </code>
<code> 400 </code>
</list>
</sub>'
INSERT INTO dbo.YourTable(key, xml_data)
SELECT
key = COALESCE(XCol.value('key[1]', 'int'),0),
xml_data = CONVERT(XML, N''''+@input+'''', 2)
FROM @input.nodes('/sub') AS XTbl(XCol)
@ATC,感谢您的评论。如果真的需要将 table 转换为 XML 格式,请尝试以下 - FOR XML PATH 是您要查找的内容
SELECT
key,
code as "list/code"
FROM dbo.YourTable
FOR XML PATH('sub')
很遗憾,我现在无法对其进行测试。
在这里你可以看到类似的问题:How to convert records in a table to xml format using T-SQL?
我认为这个SQL Server: Two-level GROUP BY with XML output更接近。
张贴在这里是因为我没有评论的声誉。
你的问题很模糊,但我的魔法水晶球告诉我,你正在寻找这个:
DECLARE @tbl TABLE([Key] INT, code INT);
INSERT INTO @tbl VALUES
(1,100)
,(1,200)
,(1,300)
,(1,400)
,(2,100)
,(2,200)
,(2,300);
--查询将首先找到一个不同的键列表,然后使用嵌套的 FOR XML
-selects 将您的数据收集到所需的结构中:
WITH DistinctKeys AS
(SELECT [Key] FROM @tbl GROUP BY [Key])
SELECT dk.[Key]
,(
SELECT dk.[Key]
,(
SELECT t.code
FROM @tbl AS t
WHERE t.[Key]=dk.[Key]
FOR XML PATH(''),ROOT('list'),TYPE
)
FOR XML PATH('sub'),TYPE
) AS XML_Data
FROm DistinctKeys AS dk
结果
Key XML_Data
1 <sub><Key>1</Key><list><code>100</code><code>200</code><code>300</code><code>400</code></list></sub>
2 <sub><Key>2</Key><list><code>100</code><code>200</code><code>300</code></list></sub>
我有一个table
Key code
1 100
1 200
1 300
1 400
2 100
2 200
2 300
我正在用键在一行中查找我的结果,在另一行中查找结果 XML_data
Key XML_Data(XML column)
1 <sub><key>1...
2 <sub><key>2...
XML_Data 示例:
<sub>
<key> 1 </Key>
<list>
<code> 100 </code>
<code> 200 </code>
<code> 300 </code>
<code> 400 </code>
</list>
</sub>
谢谢
您没有详细说明 XML 在哪里等等,但一般来说,以下查询应该对您的情况有所帮助。
INSERT INTO dbo.YourTable
(key, xml_data)
VALUES
(KEY, CONVERT(XML, N'YOUR_XML', 2));
您可以更进一步,通过将 XML 声明为变量,从 XML 中提取您的 KEY,并根据整个变量添加到第 2 列 XML。
DECLARE @input XML = '<sub>
<key> 1 </key>
<list>
<code> 100 </code>
<code> 200 </code>
<code> 300 </code>
<code> 400 </code>
</list>
</sub>'
INSERT INTO dbo.YourTable(key, xml_data)
SELECT
key = COALESCE(XCol.value('key[1]', 'int'),0),
xml_data = CONVERT(XML, N''''+@input+'''', 2)
FROM @input.nodes('/sub') AS XTbl(XCol)
@ATC,感谢您的评论。如果真的需要将 table 转换为 XML 格式,请尝试以下 - FOR XML PATH 是您要查找的内容
SELECT
key,
code as "list/code"
FROM dbo.YourTable
FOR XML PATH('sub')
很遗憾,我现在无法对其进行测试。 在这里你可以看到类似的问题:How to convert records in a table to xml format using T-SQL?
我认为这个SQL Server: Two-level GROUP BY with XML output更接近。
张贴在这里是因为我没有评论的声誉。
你的问题很模糊,但我的魔法水晶球告诉我,你正在寻找这个:
DECLARE @tbl TABLE([Key] INT, code INT);
INSERT INTO @tbl VALUES
(1,100)
,(1,200)
,(1,300)
,(1,400)
,(2,100)
,(2,200)
,(2,300);
--查询将首先找到一个不同的键列表,然后使用嵌套的 FOR XML
-selects 将您的数据收集到所需的结构中:
WITH DistinctKeys AS
(SELECT [Key] FROM @tbl GROUP BY [Key])
SELECT dk.[Key]
,(
SELECT dk.[Key]
,(
SELECT t.code
FROM @tbl AS t
WHERE t.[Key]=dk.[Key]
FOR XML PATH(''),ROOT('list'),TYPE
)
FOR XML PATH('sub'),TYPE
) AS XML_Data
FROm DistinctKeys AS dk
结果
Key XML_Data
1 <sub><Key>1</Key><list><code>100</code><code>200</code><code>300</code><code>400</code></list></sub>
2 <sub><Key>2</Key><list><code>100</code><code>200</code><code>300</code></list></sub>