因此,假设我们有一个表t1
,我们需要将每个插入的行复制到t2
中,并在它们之间放置外键链接。让我告诉我的意思:有没有办法在视图中获取插入的缩进?
我们有表T1
-----------------------------
| id | value | external_id|
-----------------------------
| | | |
-----------------------------
和表T2
----------------
| id | value |
----------------
| | |
----------------
其中id列具有IDENTITY标记和EXTERNAL_ID是一个链接到t2.id(I”将在下面解释)
我们打算将行(value ='TEST')插入到表t1中。预期的结果是这样的:
-----------------------------
| id | value | external_id|
-----------------------------
| 123| TEST | 345 |
-----------------------------
和表T2
----------------
| id | value |
----------------
| 345| TEST |
----------------
algorythm的主要思想是基于触发器:在INSTEAD OF
触发对表1我做的:
- 插入到t1并记住插入的ID在一个单独的表中使用
OUTPUT
子句 - 插入到t2并记住马使用映射
与OUTPUT
external_id
柱再次pping (t1.id, t2.id)
但是,有一些我不明白怎么打的一些问题:
- T1实际上不是一个表,它是一个视图与
INSTEAD OF
触发器(但这不是一个问题) - t2也是一个触发视图,这是一个问题,因为我不能从它插入的ID
- 此外t2是一个远程视图 - 这是一个大问题,因为在使用远程视图时存在一些限制
所以,也许我正朝着一个错误的方向前进?有没有办法解决我的问题,而不使用光标和存储过程在t1上的触发器? (我的意思是我知道有一种方法可以通过存储过程将所有数据存入t2,并在该过程的OUTPUT参数中获取插入的id,但也许有更优雅的方式?)
不幸的是我不能在远程表或视图上使用OUTPUT子句。所以可能存储过程是唯一的选择。 – Dima
因此,您正在创建sp以在t2坐的服务器上执行t2插入,对吗?所以你仍然会先执行t2插入,然后使用返回的id来执行t1插入。 – Bill
不,目前的解决方案是这样的:1.插入t1。 2.将数据打包到xml中,并将其插入带有sp的t2中。 3.更新t1 – Dima