有没有办法在视图中插入插入的缩进?

时间:2011-08-06 11:09:43

标签: sql sql-server

假设我们有一个表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触发器中我做:

  1. 使用OUTPUT子句插入t1并记住插入的id在单独的表中
  2. 插入t2并再次使用(t1.id, t2.id)
  3. 记住映射OUTPUT
  4. 使用映射
  5. 更新external_id

    但是有些问题我无法想象如何与之斗争:

    1. t1实际上不是一张表,它是INSTEAD OF触发器的视图(但这不是问题)
    2. t2也是一个带触发器的视图,因为我无法从中获取插入的ID
    3. 此外t2是一个远程视图 - 这是一个很大的问题,因为使用远程视图有一些限制
    4. 因此。也许我的方向错了?有没有办法解决我的问题而不在t1的触发器中使用游标和存储过程? (我的意思是我知道有一种方法可以将所有数据放入t2并使用存储过程并在该过程的OUTPUT参数中获取插入的ID但是可能有更优雅的方式吗?)< / p>

3 个答案:

答案 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