SQL2008如何查询出所有数据库的所有触发器

chaizhiyong 2014-08-01 10:04:23
我试了下查询只能当前数据库的触发器。
求高人指点

比如

DB1 TABLE1 TR1
DB1 TABLE2 TR1
DB1 TABLE3 TR1
DB2 TABLE1 TR1
DB2 TABLE2 TR1
DB3 TABLE1 TR1
DB3 TABLE2 TR1
...全文
531 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
guguda2008 2014-08-01
  • 打赏
  • 举报
回复
declare @str varchar(max)
select @str=isnull(@str+'
','')+'union all 
select '''+name+''' as db,t2.name as tb,t1.name as trg
from '+name+'.sys.triggers t1
inner join sys.tables t2 on t1.object_id=t2.object_id'
from sys.databases
where database_id>4

select @str=stuff(@str,1,10,'')

exec( @str)
發糞塗牆 2014-08-01
  • 打赏
  • 举报
回复
因为大部分触发器是数据库级别的,所以只能在库级别查
Tiger_Zhao 2014-08-01
  • 打赏
  • 举报
回复
从 sysdatabases 取所有数据库名,
拼动态 SQL 把每个库查询触发器的语句 UNION ALL 起来,
执行 SQL。
chaizhiyong 2014-08-01
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
一般触发器属于库级别,要全部查的话用游标来遍历。 有一些触发器比如登录触发器,属于服务器级别,这个可以查出来,但是不属于某个哭
谢谢,我现在就是用的遍历,但是觉得用遍历麻烦了点,还以为有简单的查询系统表的方法。呵呵
發糞塗牆 2014-08-01
  • 打赏
  • 举报
回复
一般触发器属于库级别,要全部查的话用游标来遍历。 有一些触发器比如登录触发器,属于服务器级别,这个可以查出来,但是不属于某个哭
waitinghairu 2014-08-01
  • 打赏
  • 举报
回复
只要在创建触发器的时候没有指定WITH ENCRYPTION 选项,都能查看到源代码。 在SMSS的对象资源管理器中找到有触发器的表,展开,在下面的触发器项目下找到触发器的名字,双击(或者右击触发器名字,在菜单中选择编辑), 就能看到触发器的源代码了。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧