SQL Server의 여러 테이블로 XML을 파쇄 할 때 그룹 데이터
-
06-07-2019 - |
문제
이것은이 질문에서 다음과 같습니다.
루트 노드를 추가하려면 SQL Server에서 XML을 수정하십시오.
제기 된 문제 외에도 그 질문에 고정 된 문제 외에도 기존 테이블을 2로 나누고 있습니다. 여기서 두 번째 테이블은 첫 번째 테이블의 하위 테이블이며 외국 키는 첫 번째 테이블로 다시 나타납니다.
그래서 현재
table1(ID, col1, col2, col3....coln)
되고 있습니다
table1(ID, col1, col2, col3)
그리고
table2(PK, FK_table1, col4, col5, ...coln)
현재 나는 기존 테이블에서 아무것도 제거하지 않았고, 두 번째 테이블을 만들었고, 나는 산출 첫 번째 테이블의 PK를 1 인서트의 FK로 두 번째로 두는 것을 포함하여 두 테이블에 한 번에 두 테이블에 삽입 할 수 있도록 구성하십시오.
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)
이것은 한 번에 두 테이블에 성공적으로 삽입됩니다 하지만 아직 표 1에서 열을 제거하지 않았다는 사실에 의존합니다. ** ** 및*는 테이블 사이의 1 : 1 관계를 초래합니다. 표 2 더 자세한 정보를 보유하고 있습니다
내가 이것에 대해 올바른 방법으로 가고 있는지 궁금합니다. 1 쿼리 로이 작업을 수행 할 수 있습니까? 아니면 분해해야합니까? 아마도 XML을 먼저 표 1으로 파쇄 한 다음 다시 표 2로 다시 파쇄하여 삽입 용 FK를 얻기 위해 표 1에 연결할 수 있다고 생각합니다. 전에 이런 일을 한 사람이 있습니까?
해결책
예, 나는 비슷한 일을했고 내가해야 할 다른 일에 따라 두 가지 제안을 모두 사용했습니다.
옵션 :
XML을 한 번 Tabe 변수로 한 번 파쇄하여 Tabe로 구별되는 Select Select TAPE1로 선택하십시오.
XML을 두 번 파쇄했습니다.
나는 한 번에 값 비싼 작업 (XML 파쇄)을 먼저하는 경향이 있습니다.