2017-05-05 141 views
1

我有SQL TVP對象具有多個記錄(例如2條記錄)。 我需要將這些記錄插入到兩個幾乎相同的表中,唯一的區別是第二個表具有多個列,該列是指向第一個表的外鍵。所以它應該循環TVP記錄並逐個插入到兩個表中,但是將第一個表中插入的記錄的scope_identity()並將其用於第二個表中的記錄。SQL從一個TVP插入到兩個表中,使用第一個表的第一個作用域標識

第一迭代

  • 插入的記錄的插入件插入第一表
  • GET 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(讓它命名爲PersonTVP)包含名和姓列,並承擔PersonTVP有兩個記錄。

  • 我有兩個表Person和PersonExtra。 Person表具有Id,FirstName和LastName列,PersonExtra具有相同的列+一個額外的列PersonId。

我需要從PersonTVP插入數據到這兩個表中。流程應該是:

  • 從PersonTVP採取記錄,並插入到Person表
  • 獲取插入的記錄(從ID列中的值)
  • 插入相同的記錄的SCOPE_IDENTITY()到PersonExtra表並使用SCOPE_IDENTITY()爲PersonId列(附加列)

依此類推,只要PersonTVP有記錄就循環。

相關問題