문제

이것은이 질문에서 다음과 같습니다.
루트 노드를 추가하려면 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에 연결할 수 있다고 생각합니다. 전에 이런 일을 한 사람이 있습니까?

도움이 되었습니까?

해결책

예, 나는 비슷한 일을했고 내가해야 할 다른 일에 따라 두 가지 제안을 모두 사용했습니다.

옵션 :

  1. XML을 한 번 Tabe 변수로 한 번 파쇄하여 Tabe로 구별되는 Select Select TAPE1로 선택하십시오.

  2. XML을 두 번 파쇄했습니다.

나는 한 번에 값 비싼 작업 (XML 파쇄)을 먼저하는 경향이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top