agrupar dados quando retalhamento xml para várias tabelas no servidor SQL
-
06-07-2019 - |
Pergunta
Este surge na sequência desta pergunta:
Modificar XML no servidor SQL para adicionar um nó raiz
Além do problema colocado e agora fixada nessa questão, eu também estou dividindo a tabela existente em 2, onde a segunda tabela é uma sub-tabela da primeira, com uma volta de chave estrangeira para o primeiro.
Assim, atualmente
table1(ID, col1, col2, col3....coln)
Está se tornando
table1(ID, col1, col2, col3)
e
table2(PK, FK_table1, col4, col5, ...coln)
No momento eu não ter retirado qualquer coisa, desde a tabela existente, acaba de criar o segundo, e eu descobri o OUTPUT construção para que eu possa inserir em ambas as tabelas de uma vez, inclusive colocando o PK da 1ª tabela no 2º como FK no 1 insert - assim algo 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)
isso com sucesso inserções em ambas as tabelas de uma só vez MAS se baseia no fato eu não ter removido as colunas da tabela 1, no entanto, ** e * resulta em uma relação 1: 1 entre as tabelas, quando o que eu preciso é para table1 apenas para ter linhas para col1 distinta, col2, col3, com segurando a informação mais detalhada table2
Eu estou querendo saber se eu estou lidando com isso da maneira certa? Será que vou ser capaz de fazer isso em uma consulta ou eu vou ter que dividi-la? Estou pensando que talvez eu poderia rasgar o XML primeiro em table1, em seguida, rasgar novamente separadamente em table2, juntando-se na tabela 1 para obter o FK para a inserção? Alguém já fez esse tipo de coisa antes?
Solução
Sim, eu sou feito semelhante e usou as duas sugestões dependendo do que outro trabalho que eu preciso fazer
Opções:
-
Fragmento o XML uma vez em uma variável tabe SELECIONE distinto daquele em table1, SELECT em table2
-
Fragmento o XML duas vezes.
Eu estaria inclinado a fazer a operação caro (XML retalhamento), primeiro de uma só vez.