1

我有带有多条记录的 SQL TVP 对象(例如 2 条记录)。我需要将这些记录插入到两个几乎相同的表中,唯一的区别是第二个表还有一个列,它是指向第一个表的外键。所以它应该循环TVP记录并一个一个地插入两个表中,但在第一个表中获取插入记录的scope_identity()并将其用于第二个表中的记录。

第一次迭代

  • 插入第一个表
  • 获取插入记录的 scope_identity()
  • 插入到第二个表中(使用第一个表中的范围标识来填充附加列)

依此类推,取决于 TVP 中有多少条记录。

我怎样才能做到这一点?

4

2 回答 2

0

好的,让我更清楚一点。我将举一个示范性的例子::

  • 我有包含 FirstName 和 LastName 列的 TVP(让它命名为 PersonTVP),并假设 PersonTVP 有两条记录。

  • 我有两张桌子,Person 和 PersonExtra。Person 表有 Id、FirstName 和 LastName 列,PersonExtra 有相同的列 + 一个额外的列 PersonId。

我需要将来自 PersonTVP 的数据插入到这两个表中。流量应该是:

  • 从 PersonTVP 获取记录并插入到 Person 表中
  • 获取插入记录的 Scope_Identity() (来自 Id 列的值)
  • 将相同的记录插入到 PersonExtra 表中,并将 Scope_Identity() 用于 PersonId 列(附加列)

依此类推,只要 PersonTVP 有记录就循环。

于 2017-05-05T13:14:50.650 回答
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
于 2017-05-05T12:33:11.807 回答