【发布时间】:2016-11-08 22:24:18
【问题描述】:
我正在尝试使用以下代码生成一个 xml。但我对输出结果不满意。下面的代码我使用游标来获取要生成的 xml 的 ID,并在另一个表中更新。任何帮助表示赞赏,我是 xml 的新手。谢谢
DECLARE @xml_var XML;
DECLARE @ID INT;
DECLARE XML_CURSOR CURSOR FOR
SELECT id
FROM xml_temp_table
WHERE id IS NOT NULL;
OPEN XML_CURSOR;
FETCH NEXT
FROM XML_CURSOR
INTO @ID;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @xml_var =
(
SELECT
(
SELECT 'Type' AS ID,
'Initial' AS VALUE,
'' AS TAG,
'true' AS VISIBLE,
Getdate() AS HISTORY,
'' AS DESCRIPTION,
'' AS COMMENT
FROM XML_TABLE d
WHERE D.XML_ID = @ID FOR XML PATH('field'),
TYPE ) AS 'field',
(
SELECT 'OwnerName' AS ID,
'Testing_XML' AS VALUE,
'' AS TAG,
'true' AS VISIBLE,
Getdate() AS HISTORY,
'' AS DESCRIPTION,
'' AS COMMENT
FROM XML_TABLE d
WHERE D.XML_ID = @ID FOR XML PATH('field'),
TYPE ) AS 'field'
FROM XML_TABLE p
WHERE P.XML_ID = @ID FOR XML PATH('Material'),
ROOT('FormValue') );
UPDATE S
SET S.XML_COL = @xml_var,
FROM LOCATION_TABLE_XML S
WHERE S.ID = @ID;
FETCH NEXT
FROM XML_CURSOR
INTO @ID;
END;
我得到的结果是这样的
<FormValue>
<Material>
<field> ----- i dont want this
<field>
<id>Type</id>
<value>Initial</value>
<tag />
<visible>true</visible>
<history>2016-11-08T16:53:16.440</history>
<description />
<comment />
</field>
<field>
<id>OwnerName</id>
<value>Testing_XML</value>
<tag />
<visible>true</visible>
<history>2016-11-08T16:53:16.440</history>
<description />
<comment />
</field>
</field> ---- i dont want this
</Material>
</FormValue>
但是我想要这样的结果
<FormValue>
<Material>
<field>
<id>Type</id>
<value>Initial</value>
<tag />
<visible>true</visible>
<history>2016-11-08T16:53:16.440</history>
<description />
<comment />
</field>
<field>
<id>OwnerName</id>
<value>Testing_XML</value>
<tag />
<visible>true</visible>
<history>2016-11-08T16:53:16.440</history>
<description />
<comment />
</field>
</Material>
</FormValue>
【问题讨论】:
-
顺便说一句:我不认为你需要一个光标。这应该可以在正常的基于集合的操作中轻松完成。如果需要,您可以再添加一个问题,在其中提供简化的表定义以及一些示例数据行和预期输出。
-
感谢 Shnugo,它成功了。当然,将发布另一个问题以在没有光标的情况下生成它。
标签: sql-server xml