使用context_info传递上下文信息禁用会话级触发器
2009-12-02 14:27
676 查看
如何在会话级别禁用触发器是个问题,因为sql server并没有提供一个管理手段可以在会话级禁用触发器,它只提供
alter table 表名 disable trigger 触发器名 类似这种,而这种方法一旦执行,那如果在同一时间的其他过程,也不会执行触发器。但是我们可以巧妙绕道使用 context_info 来让触发器支持会话级别的禁用。
新建触发器
alter TRIGGER testtrigger
ON t1
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
if(context_info() = 0x00000001)
begin
print 'ok';
end
END
GO
如果要在会话级禁用触发器,只需要执行:
set context_info 0x00000001;
insert into t1
values (1,'1');
这样就能根据上下文来执行触发器的具体过程了。
在UDF里面也是一样的,甚至在同一会话存储过程嵌套调用,都可以根据上下文来执行。
不过记住context_info 是一个varbinary(128)的变量,在动态视图sys.dm_exec_sessions的context_info字段里面有体现。可以使用 select context_info from sys.dm_exec_sessions where session_id = @@spid;来查看。
alter table 表名 disable trigger 触发器名 类似这种,而这种方法一旦执行,那如果在同一时间的其他过程,也不会执行触发器。但是我们可以巧妙绕道使用 context_info 来让触发器支持会话级别的禁用。
新建触发器
alter TRIGGER testtrigger
ON t1
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
if(context_info() = 0x00000001)
begin
print 'ok';
end
END
GO
如果要在会话级禁用触发器,只需要执行:
set context_info 0x00000001;
insert into t1
values (1,'1');
这样就能根据上下文来执行触发器的具体过程了。
在UDF里面也是一样的,甚至在同一会话存储过程嵌套调用,都可以根据上下文来执行。
不过记住context_info 是一个varbinary(128)的变量,在动态视图sys.dm_exec_sessions的context_info字段里面有体现。可以使用 select context_info from sys.dm_exec_sessions where session_id = @@spid;来查看。
相关文章推荐
- SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法
- FFmpeg(4)-使用avformat_find_stream_info()来探测获取封装格式的上下文信息
- SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法
- 通过脚本_spPageContextInfo获取当前SharePoint上下文信息
- SQLServer2005 触发器 提示 '其他会话正在使用事务的上下文'
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
- SQLServer2005触发器提示其他会话正在使用事务的上下文的解决方法
- Xamarin如何使用终端设备的NFC功能传递卡号等信息给Web页面(Android)
- android开发基础:Intent与Bundle的使用,实现页面跳转及信息传递
- 使用jQuery异步传递Model到控制器方法,并异步返回错误信息
- 购物车清空转发与重定向问题(使用Session来保存客户一次会话的信息记录)???时间问题,待解决!还没解决
- 使用Bundle在Activity间传递信息
- SharePoint 页面JS上下文对象 "_spPageContextInfo"
- 使用WiX打包你的应用程序之二---向WiX脚本传递信息(属性)的几种方式
- 支持“XXXDbContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=2
- [Unity3D]使用OnGUI函数显示状态栏并且使用触发器修改玩家当前信息
- 在SQL Server 中使用EVENTDATA()函数来获取DDL 触发器信息
- 简单使用WCF MessageHeader传递信息
- 使用SQLServer Audit来监控触发器的启用、禁用情况(转载)
- 在Activity间使用Intent传递信息