怎么通过系统表知道触发器的类型?

j9988 2003-10-21 10:06:34
怎么通过系统表(而不OBJECTPROPERTY函数)知道触发器的类型?(UPDATE,DELETE,INSERT或它们的组合)


...全文
31 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiufurong007 2003-11-01
  • 打赏
  • 举报
回复
up
yujohny 2003-10-21
  • 打赏
  • 举报
回复
找了半天头都晕了
好点再找过
pengdali 2003-10-21
  • 打赏
  • 举报
回复
支持所有没有加密的触发器。
pengdali 2003-10-21
  • 打赏
  • 举报
回复
select
case when [text] like '%[ '+char(10)+']for[ '+char(13)+']%'
then
substring(text,
patindex('%[ '+char(10)+']for[ '+char(13)+']%',text)+5,
patindex('%[ '+char(10)+']as[ '+char(13)+']%',text)-patindex('%[ '+char(10)+']for[ '+char(13)+']%',text)-5)
else substring(text,
charindex('INSTEAD OF',text),
patindex('%[ '+char(10)+']as[ '+char(13)+']%',text)-charindex('INSTEAD OF',text))
end 类型
from syscomments c,sysobjects o where o.id=c.id and o.xtype='TR'
txlicenhe 2003-10-21
  • 打赏
  • 举报
回复
唉,找了半天,跟大力的一样,加密了的没办法。

Select text from syscomments c
join sysobjects o on c.id = o.id
Join sysobjects s on o.parent_obj = s.id
where 1=1
and o.xtype = 'TR'
and s.name = '表名'
j9988 2003-10-21
  • 打赏
  • 举报
回复
这怎么行?不行!
pengdali 2003-10-21
  • 打赏
  • 举报
回复
加了密的我不负责。。 :D
pengdali 2003-10-21
  • 打赏
  • 举报
回复
select substring(text,charindex('for ',text)+4,charindex(' as',text)-charindex('for ',text)-3) ,* from syscomments c,sysobjects o where o.id=c.id and o.xtype='TR'
j9988 2003-10-21
  • 打赏
  • 举报
回复
大力:写出具体的方法来.
j9988 2003-10-21
  • 打赏
  • 举报
回复
我有300分未结贴,给300分.另200分在此领:
http://expert.csdn.net/Expert/topic/2372/2372581.xml?temp=8.420962E-02
pengdali 2003-10-21
  • 打赏
  • 举报
回复
可以用substring吗?
j9988 2003-10-21
  • 打赏
  • 举报
回复
w_rose和newdongkui(老乌鸦) 的方法,但我认为不大准确(在一个表有多个触发器的情况下)

@trigtype=(SELECT CASE WHEN dbo.sysobjects.deltrig > 0 THEN 'DELETE'
WHEN dbo.sysobjects.instrig > 0 THEN 'INSERT'
WHEN dbo.sysobjects.updtrig > 0 THEN 'UPDATE' END
FROM dbo.sysobjects INNER JOIN
dbo.sysobjects sysobjects_1 ON dbo.sysobjects.parent_obj = sysobjects_1.id
WHERE (dbo.sysobjects.type = 'TR') AND (dbo.sysobjects.name = @ObjectName))
END
cadinfo 2003-10-21
  • 打赏
  • 举报
回复
要知道触发器是否enable,必须根据不同类型进行判断!
SELECT NAME,CASE WHEN STATUS & 0X2000<>0 THEN 'Y' ELSE NULL END AS [INSTEAD OF],
CASE WHEN STATUS & 0X100<>0 THEN 'Y' ELSE NULL END AS [DELETE],
CASE WHEN STATUS & 0X200<>0 THEN 'Y' ELSE NULL END AS [UPDATE],
CASE WHEN STATUS & 0X400<>0 THEN 'Y' ELSE NULL END AS [INSERT],
CASE WHEN STATUS & 0X900<>0X900 AND STATUS & 0XA00<>0XA00 AND STATUS & 0XC00<>0XC00 THEN 'Y' ELSE 'N' END AS [ENABLED]
FROM SYSOBJECTS
WHERE TYPE='TR'
viptiger 2003-10-21
  • 打赏
  • 举报
回复
up 一下
j9988 2003-10-21
  • 打赏
  • 举报
回复
果真高手!谢谢CCEO!
等晚上我有环境时,测试后结贴.
pengdali 2003-10-21
  • 打赏
  • 举报
回复
2000上通过,没有问题!!!
CCEO 2003-10-21
  • 打赏
  • 举报
回复
6.5及以前的版本不行,因为没有STATUS字段,而且没找到代替的字段
CCEO 2003-10-21
  • 打赏
  • 举报
回复
微软的STATUS意义未公开,所以不知道是否有例外,可不知道是否不同版本的SQL SERVER会有所不同
pengdali 2003-10-21
  • 打赏
  • 举报
回复
y
CCEO 2003-10-21
  • 打赏
  • 举报
回复
我那个和加不加密没有关系
加载更多回复(5)

34,588

社区成员

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

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