我試圖使用下面的代碼生成一個XML。但是我對輸出結果不滿意。在下面的代碼中,我使用遊標來獲取要生成的xml的id並在另一個表中進行更新。任何幫助表示讚賞,我是新來的XML。由於我如何生成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
謝謝Shnugo,它工作。當然,會發布另一個問題來生成它沒有光標。 – wwidhoo