Question

Je voudrais exécuter une requête (vaste) qui produit une ligne de XML. Ce XML représente environ 12 tables de valeur données relationnelles. Quand je « supprimer » une ligne de la table de haut niveau que je voudrais « capturer » l'état des données à ce moment (en XML), enregistrez-le sur une table d'archivage, puis supprimez toutes les données de la table des enfants et enfin marquer le table de haut niveau / ligne comme "isDeleted = 1". Nous avons d'autres données pendaient de la table parent que NE PEUT PAS supprimé et ne peut pas perdre la relation à la table.

J'ai la plupart du XML a fonctionné - voir mon message sur cette boîte de Pandore.

Maintenant, comment puis-je capturer que dans une table d'archives?

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

Cela ne fonctionne tout simplement pas. :)

Toutes les suggestions?

TIA

Était-ce utile?

La solution

Vous avez besoin d'une sous-requête pour envelopper tout ce que la création XML en un seul scalaire qui va dans la colonne XmlData. Encore une fois, utilisez TYPE XML pour créer un scalaire de type non une chaîne:

INSERT INTO CampaignArchive(CampaignID, XmlData)
SELECT CampaignID, (
 select (really long list of columns) 
 FROM (all my tables) FOR XML PATH ..., type);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top