【发布时间】:2012-05-22 18:02:11
【问题描述】:
我在桌子上有一个代替触发器。触发器工作正常,但我们有一个应用程序,用户可以在其中通过 UI 对表执行批量更新。在这种情况下,select scope_identity 返回 null。当用户通过 UI 执行更新时,我运行 sql profiler 来查看后台发生了什么,我得到了这个:
insert into Table(column1, column2,....)
values (value1, value2,.....)
go
select scope_identity()
go
在这种情况下,内部定义的scope_identity()而不是触发器返回正确的值,但上述语句中的scope_identity()返回null,此时应用程序会抛出错误。我想这是因为插入发生在触发器内部,它不属于上述 scope_identity 的范围。 我知道可以通过使用 after trigger 代替 trigger 来解决此问题,但是该表包含 ntext 列,这将阻止我使用 after trigger。将 ntext 列转换为 nvarchar(max) 也不是我的选择。 关于如何使 select scope_identity() 返回正确值的任何想法?
提前致谢。
【问题讨论】:
-
发布触发器的内容。
-
select scope_identity()应该与 insert 在同一批次中 - 换句话说,您需要删除go。 -
@Ben:我不能在这里发布触发器,但它是这样的:set ansi_nulls on go setquoted_identifier on go create trigger dbo.sampletrigger on sampletable instead of insert as begin //在此处执行一些操作插入进入 sampletable(column1, column2,..) select column1, column2,... from inserted select scope_identity() end
标签: sql