0

我想运行一个生成一行 XML 的(广泛的)查询。此 XML 代表大约 12 个关系数据表。当我从顶级表中“删除”一行时,我想“捕获”当时数据的状态(以 XML 格式),将其保存到存档表中,然后删除所有子表数据,最后标记顶级表/行为“isDeleted=1”。我们还有其他数据挂在父表上,这些数据不能被删除,也不能失去与顶层表的关系。

我已经解决了大部分 XML - 请参阅我的帖子,关于那罐蠕虫。

现在,我怎样才能将其捕获到存档表中?

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

4

1 回答 1

4

您需要一个子查询来将所有 XML 创建包装到一个单独的标量中,该标量进入 XmlData 列。同样,使用 TYPE 创建 XML 类型的标量而不是字符串:

INSERT INTO CampaignArchive(CampaignID, XmlData)
SELECT CampaignID, (
 select (really long list of columns) 
 FROM (all my tables) FOR XML PATH ..., type);
于 2009-09-04T23:20:39.393 回答