假设我们有一个表t1
,我们需要将每个插入的行复制到t2
并在它们之间放置外键链接。让我说明我的意思:
我们有表t1
-----------------------------
| id | value | external_id|
-----------------------------
| | | |
-----------------------------
和表t2
----------------
| id | value |
----------------
| | |
----------------
其中id列具有IDENTITY标记,external_id是指向t2.id的链接(我将在下面解释)
我们将在表t1中插入行(值=' TEST')。预期的结果是这样的:
-----------------------------
| id | value | external_id|
-----------------------------
| 123| TEST | 345 |
-----------------------------
和表t2
----------------
| id | value |
----------------
| 345| TEST |
----------------
algorythm的主要思想是基于触发器:在table1的INSTEAD OF
触发器中我做:
OUTPUT
子句插入t1并记住插入的id在单独的表中(t1.id, t2.id)
OUTPUT
external_id
列
醇>
但是有些问题我无法想象如何与之斗争:
INSTEAD OF
触发器的视图(但这不是问题)因此。也许我的方向错了?有没有办法解决我的问题而不在t1的触发器中使用游标和存储过程? (我的意思是我知道有一种方法可以将所有数据放入t2并使用存储过程并在该过程的OUTPUT参数中获取插入的ID但是可能有更优雅的方式吗?)< / p>
答案 0 :(得分:0)
对我来说,如果t1需要来自t2的ID而不是相反,你应该将t1上的触发器的INSTEAD首先插入到t2,然后是t1。您可以将插入的OUTPUT子句用于t2。
答案 1 :(得分:0)
使用存储过程和第一次插入时的 @@ Identity 。
答案 2 :(得分:0)
如何获得桌面上的最大ID?
DECLARE @SomethingID INT
SELECT @SomethingID = MAX(SomethingID) FROM SomethingTable