博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用context_info传递上下文信息禁用会话级触发器
阅读量:6087 次
发布时间:2019-06-20

本文共 711 字,大约阅读时间需要 2 分钟。

如何在会话级别禁用触发器是个问题,因为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;来查看。

转载于:https://www.cnblogs.com/perfectdesign/archive/2009/12/02/context_info.html

你可能感兴趣的文章
玩转Android TabWidget(切换卡)
查看>>
asp.net中使用一般处理程序生成验证码
查看>>
ASP.NET MVC 3.0小知识积累
查看>>
Windows Phone Dev Notes-如何使用ConnectionSettingsTask 来启动连接设置页面
查看>>
Cocos2d-x执行时错误:Cocos2d: Get data from file(xxx.xxx) failed!
查看>>
内容提供者 ContentResolver 数据库 示例 -1
查看>>
17秋 软件工程 第六次作业 Beta冲刺 Scrum2
查看>>
web.xml中的contextConfigLocation在spring中的作用
查看>>
ElasticSearch + Canal 开发千万级的实时搜索系统
查看>>
SharePoint Server 2019新特性
查看>>
PHP 开源软件《个人管理系统》——技术规范
查看>>
SQL Server DBA必须要做的五件事
查看>>
svn打标签
查看>>
拆穿安全Web浏览的十大谎言,互联网营销
查看>>
Visual Studio 2010 实用功能总结图解
查看>>
Boost.Python
查看>>
[转载]Windows平台编程之OnCreate函数的说明
查看>>
Linux内核多线程(四)
查看>>
SQL基础---SQL UPDATE 语句
查看>>
POJ 2503 Babelfish 字典树
查看>>