2017-05-05 1 views
1

여러 레코드 (예 : 2 레코드)가있는 SQL TVP 개체가 있습니다. 이 레코드를 두 개의 거의 동일한 테이블에 삽입해야합니다. 유일한 차이점은 두 번째 테이블에는 첫 번째 테이블을 가리키는 외래 키인 하나 이상의 열이 있다는 것입니다. 그래서 TVP 레코드를 반복하고 두 테이블에 하나씩 삽입해야하지만 첫 번째 테이블에 삽입 된 레코드의 scope_identity()를 가져 와서 두 번째 테이블에 레코드로 사용해야합니다. 삽입 된 레코드의 첫 번째 테이블에SQL 하나의 TVP에서 두 개의 테이블로 삽입, 두 번째 테이블에 처음부터 범위 ID를 사용합니다.

첫번째 반복

  • 삽입
  • 얻기 SCOPE_IDENTITY()
  • (추가 항목을 기입 할 제 테이블 범위 indentity를 사용하여) 두 번째 테이블에 삽입

TVP에있는 레코드 수에 따라 다릅니다.

어떻게하면됩니까?

답변

0

분명히 우리는 당신의 열과 테이블 이름 등을 가지고 있지 않기 때문에 많은 코드를 생략했습니다. TVP에 ID 값을 원하면 행을 계산하고 where 절과 while 루프에서 사용할 수 있습니다.

Declare @Var1 Int 
Declare @YourTVP YourTVPName 
Declare @RowCounter Int = 1 


While (1=1) 

Insert Into YourTable1 (Column1, ...) 
Select (Column1, ...) 
From @YourTVP 
Where @RowCounter = SomeIDColumn 
@Var1 = Select @@SCOPE_IDENTITY() 


Insert Into YourTable2 (Column1, ...) 
(@Var1, ...) 

If (Some logic to Break your While loop) 
Break 
Else @RowCounter = @RowCounter + 1 
End 
0

좋아, 좀 더 명확히하겠습니다. 나는 실증 예 :

  • 을 줄 것이다 나는 TVP (IT PersonTVP로 이름을 보자)를 포함하는 이름 및 성 열을 가지고 PersonTVP 두 개의 레코드가 가정합니다.

  • 두 테이블, Person 및 PersonExtra가 있습니다. Person 테이블에는 Id, FirstName 및 LastName 열이 있고 PersonExtra에는 동일한 열 + PersonId 열이 추가됩니다.

이 두 테이블에 PersonTVP의 데이터를 삽입해야합니다. 흐름이 있어야한다 :

  • 이 PersonTVP에서 기록을 가지고 사람이 테이블에 삽입
  • PersonExtra 테이블에 삽입 레코드 (ID 항목 값)
  • 삽입 동일한 레코드의 SCOPE_IDENTITY()를 얻고 SCOPE_IDENTITY()를 사용 PersonId 열 (추가 열)

등등. PersonTVP 레코드가있는 한 반복하십시오.

관련 문제