0

我的 c# 代码调用存储过程并将 tvp 作为参数传递给 storerd 过程。我需要将接收到的数据插入到几个数据库表中。

TVP schema:
TVP_ID int PRIMARY KEY IDENTITY, Col1 int, Col2 int, Col3 int.

首先,我需要将 Col1 插入 Table1:

Table1 schema:
Table1_ID int PRIMARY KEY IDENTITY, Col1 int

比,我需要将所有列插入 Table2。

Table2 schema:
TVP_ID int, Col1 int, Col2 int, Col3 int, Table1_ID int

其中 TVP_ID 和 Table1_ID 是 TVP 和 Table1 表的主键。

我怎样才能做到这一点?

谢谢!

编辑:我的问题是,当我有 Table1(将数据插入 col1 之后)时,TVP 和 Table1 之间的连接不再存在。TVP 的键是 TVP_ID,Table1 的键是 Table1_ID,我失去了它们之间的连接。

我插入了多行,所以一旦我向 Table1 添加了多行,我怎么能在 table2 中插入多行?

4

1 回答 1

0

当您插入 MSSQL 时,所有插入的数据都会临时存储。您可以使用 OUTPUT 子句访问数据。在此输出子句中,您有两种访问数据的方式。已插入。*(或指定的列)和已删除。. 这样,您可以捕获插入或删除的相同数据,并将其路由到另一个表。使用 Insert 语句,您只能使用 OUTPUT 插入。,仅删除 OUTPUT 已删除。* 并同时更新两者(更新毕竟只是删除,并且插入同一行的 1 个或多个单元格已更改)

语法如下:

Insert Into table1(table1_ID, col1)
Output inserted.tabl1_id, inserted.col1 into table2
from .... (or Values()? )

插入后,您可以执行 OUTPUT insert.col1、inserted.col2 等 INTO table2。对于更新和删除,您可以使用相同的语法(OUTPUT deleted.* into <2nd table>)

如果您必须将数据复制到多个表中,也可以将其存储在表变量或临时表中。请注意,除了表格之外,您不能存储任何东西,即使您知道它只会返回一行。这是因为虽然您可能知道它总是会返回 1 行,但 SQL 不会也不会让这成为问题。

于 2020-06-11T14:32:26.793 回答