Pregunta

Esto se deduce de esta pregunta:
Modifique XML en el servidor SQL para agregar un nodo raíz

Además del problema planteado y ahora resuelto en esa pregunta, también estoy dividiendo la tabla existente en 2, donde la segunda tabla es una sub-tabla de la primera, con una clave externa de nuevo a la primera.

Así que actualmente

table1(ID, col1, col2, col3....coln)

Se está convirtiendo

table1(ID, col1, col2, col3)

y

table2(PK, FK_table1, col4, col5, ...coln)

En este momento no he eliminado nada de la tabla existente, solo creé la segunda, y descubrí la construcción SALIDA para poder insertarla en ambas tablas a la vez, incluida la colocación de PK de la 1ª tabla en la 2ª como FK en la inserción 1, así que algo así como:

INSERT INTO table1 col1, col2,...etc...

OUTPUT inserted.ID, col1, col2, ....
INTO table2(FK_table1, col1, col2, .... )

Select  col.value('node1[1]', 'int') col1,
 col.value('node2[1]', 'varchar(50)') col2,
....etc......
FROM @xml.nodes('//Items/Item') doc(col)

Esto se inserta con éxito en ambas tablas a la vez PERO se basa en el hecho de que todavía no he eliminado las columnas de la tabla1, ** AND * produce una relación de 1: 1 entre las tablas, cuando lo que necesito es que table1 tenga filas para col1, col2, col3, con table2 con la información más detallada

Me pregunto si voy a hacer esto de la manera correcta. ¿Podré hacer esto en una consulta o tendré que dividirlo? Estoy pensando que tal vez podría destruir el xml primero en la tabla 1, y luego volver a triturar por separado en la tabla 2, uniéndome en la tabla 1 para obtener el FK para la inserción. ¿Alguien ha hecho este tipo de cosas antes?

¿Fue útil?

Solución

Sí, he terminado de manera similar y he usado ambas sugerencias según el trabajo que necesito hacer

Opciones:

  1. Triture el XML una vez en una variable tabe SELECCIONE DISTINTO de eso en tabla1, SELECCIONE en tabla2

  2. Triture el XML dos veces.

Me inclinaría por hacer la operación costosa (trituración de XML) primero de una vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top