Domanda

Vorrei eseguire un (ampio) query che produce una linea di XML. Questo XML rappresenta circa 12 tavoli vale la pena di dati relazionali. Quando io "Elimina" una riga dalla tabella di livello superiore mi piacerebbe "catturare" lo stato dei dati in quel momento (in XML), salvarlo in un tabella di archivio, quindi eliminare tutti i dati della tabella del bambino e, infine, segnare la tavolo livello superiore / riga come "isDeleted = 1". Noi abbiamo altri dati appeso fuori della tabella padre che NON PUO essere eliminato e non può perdere la relazione con il piano del tavolo.

Ho la maggior parte del XML elaborato - vedi mio post qui su quel vaso di Pandora.

Ora, come faccio a catturare che in una tabella di archivio?

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

Questo semplicemente non funziona. :)

Qualche suggerimento?

TIA

È stato utile?

Soluzione

Hai bisogno di una sottoquery per avvolgere tutto ciò che la creazione di XML in un unico scalare che va nella colonna XmlData. Anche in questo caso, utilizzare TYPE per creare uno scalare di tipo XML non una stringa:

INSERT INTO CampaignArchive(CampaignID, XmlData)
SELECT CampaignID, (
 select (really long list of columns) 
 FROM (all my tables) FOR XML PATH ..., type);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top