Frage

Ich möchte eine (umfangreiche) Abfrage auszuführen, die eine Zeile von XML erzeugt. Diese XML steht für etwa 12 Tabellen im Wert von relationalen Daten. Als ich „Löschen“ eine Zeile aus der Top-Level-Tabelle würde ich auf „Capture“ wie der Zustand der Daten zu diesem Zeitpunkt (in XML), wird alle Daten untergeordnete Tabelle speichert es in eine Archivtabelle, dann löschen und schließlich markiert die Top-Level-Tabelle / Zeile als "isDeleted = 1". Wir haben andere Daten von der übergeordneten Tabelle hängen, dass kann nicht gelöscht werden und die Beziehung zu der oberen Tabelle nicht verlieren kann.

Ich habe die meisten der XML gearbeitet - siehe meinen Beitrag hier auf dieser Dose Würmer.

Nun, wie kann ich das in eine Archivtabelle erfassen?

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 ...

Das funktioniert einfach nicht. :)

Irgendwelche Vorschläge?

TIA

War es hilfreich?

Lösung

Sie brauchen eine Unterabfrage alle, dass XML-Erstellung in einem einzigen skalaren zu wickeln, die in Spalte XmlData geht. Wieder zu verwenden TYPE ein skalare vom Typ XML erstellen nicht eine Zeichenfolge:

INSERT INTO CampaignArchive(CampaignID, XmlData)
SELECT CampaignID, (
 select (really long list of columns) 
 FROM (all my tables) FOR XML PATH ..., type);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top