我想运行(广泛)的查询产生XML的一行。此XML代表约12桌价值关系数据。当我从顶级表“删除”行,我想“捕获”的数据在那一刻的状态(XML),将其保存到档案表,然后删除所有子表数据,并最终标记顶层表/行为“请将isDeleted = 1”。我们还有其他的数据挂父表的关闭该不能被删除,稳赚不赔的关系的顶级表。

我大多数XML的制定 - 见 href="https://stackoverflow.com/questions/1381763/for-xml-path-in-sql-server">我的文章蠕虫的该罐中。

现在,我怎么能捕捉到存档表?

CREATE TABLE CampaignArchive(CampaignID int, XmlData XML)

INSERT INTO CampaignArchive(CampaignID, XmlData)
SELECT CampaignID, (really long list of columns) FROM (all my tables) FOR XML PATH ...

这是行不通的。 :)

任何建议?

TIA

有帮助吗?

解决方案

您需要一个子查询来包装所有的XML创建成一个单一的标量进入列XMLDATA。再次,使用类型来创建一个XML类型不是一个字符串的一个标量:

INSERT INTO CampaignArchive(CampaignID, XmlData)
SELECT CampaignID, (
 select (really long list of columns) 
 FROM (all my tables) FOR XML PATH ..., type);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top