Abb*_*bas 5 sql-server triggers identity sql-server-2008
我在sql服务器上工作,我想在特定的表中插入记录说(a),这个表包含两列[id(身份字段)和名称(nvarchar(max)]现在在表中插入记录(a),触发器应该触发并在表b中插入标识字段值....我正在使用插入触发器之后为此目的,但我没有得到我将如何获得触发器中的标识字段值...应插入表b中.
这就是我正在使用的
create trigger tri_inserts on (a)
after insert
as
begin
insert into b (id, name) values (?,?)
end
Run Code Online (Sandbox Code Playgroud)
请尽快回复..感谢和问候Abbas Electricwala
gbn*_*gbn 13
create trigger tri_inserts on a
after insert
as
set nocount on
insert into b (id, name)
SELECT id, name FROM INSERTED
GO
Run Code Online (Sandbox Code Playgroud)
@gbn有最好的解决方案,但是我想让你理解为什么SELECT子句比在触发器中使用VALUES子句更好.触发插入/更新/删除的每批记录的触发器.因此插入的伪节点或删除的伪节点可能有一条记录,或者它们可能有一百万条.触发器必须能够处理任何一种情况.如果您使用值子句,则只能获得其中一个记录的行动.这会导致数据完整性问题.如果您决定遍历游标中的记录并使用VALUES子句,那么当您获得大量记录时,您的表现将会非常糟糕.当我来到这个工作时,我们有一个这样的触发器,花了45分钟插入一个40,000记录插入.删除光标并使用基于SELECT子句的基于集合的解决方案(虽然比示例复杂得多)将相同插入的时间减少到大约40秒.
| 归档时间: |
|
| 查看次数: |
24814 次 |
| 最近记录: |