Pregunta

Me gustaría correr un (extensa) consulta que produce una línea de XML. Este XML representa cerca de 12 tablas de valor de datos relacionales. Cuando "Borrar" una fila de la tabla de nivel superior me gustaría para "capturar" el estado de los datos en ese momento (en XML), guardarlo en una tabla de archivo, a continuación, eliminar todos los datos de la tabla hijo y finalmente marcar el tabla de nivel superior / fila como "isDeleted = 1". Hemos otros datos colgando fuera de la tabla primaria que NO PUEDE ser borrada y no puede perder la relación con la tabla de arriba.

Tengo la mayor parte del XML funcionó - ver mi post aquí en esa lata de gusanos.

Ahora, ¿cómo puedo capturar esto en una tabla de archivo?

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

Esto simplemente no funciona. :)

¿Alguna sugerencia?

TIA

¿Fue útil?

Solución

Se necesita una subconsulta para envolver todo lo que la creación de XML en un solo escalar que entra en la columna XmlData. Una vez más, utilizar TYPE para crear un escalar de tipo XML no es una cadena:

INSERT INTO CampaignArchive(CampaignID, XmlData)
SELECT CampaignID, (
 select (really long list of columns) 
 FROM (all my tables) FOR XML PATH ..., type);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top