2009-09-04 6 views
0

한 줄의 XML을 생성하는 (광범위한) 쿼리를 실행하고 싶습니다. 이 XML은 약 12 ​​개의 테이블에 해당하는 관계형 데이터를 나타냅니다. 최상위 테이블에서 행을 "삭제"하면 그 순간 (XML에서) 데이터 상태를 "캡처"하고 아카이브 테이블에 저장 한 다음 모든 하위 테이블 데이터를 삭제하고 마지막으로 최상위 수준 테이블/행은 "isDeleted = 1"입니다. 부모 테이블에 다른 데이터가 걸려 있는데 은 불가능합니다.은 삭제할 수 있으며 상위 테이블과의 관계를 잃을 수 없습니다.Sql Server - XML ​​쿼리를 캡처하여 테이블에 저장 하시겠습니까?

저는 XML의 대부분을 해결했습니다. 그 웜의 수는 my post here입니다.

어떻게 아카이브 테이블에 캡처 할 수 있습니까?

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

당신은 열 XMLDATA로가는 하나의 스칼라에 모든 XML 생성을 래핑하는 하위 쿼리가 필요합니다. 다시 TYPE을 사용하여 문자열이 아닌 XML 형식의 스칼라를 만듭니다.

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

정확히 어떻게 할 것입니까? –

관련 문제