在做ERP运维的工作中,偶尔会遇到用户使用系统过程中出现一些错误提示,这时什么快速查到报错的源头呢?可以用跟踪器跟踪,找出报错的原因,下面是根据报错内容,查到提示来自于系统里的哪个存储过程或触发器。
---查看某内容来自于某个存储过程
SELECT NAME FROM sysobjects o, syscomments s
WHERE o.id = s.id
AND TEXT LIKE '%报错内容%'
AND o.xtype = 'P'
如果是触发器把o.xtype 改为:TR
--查找存在某内容的存储过程名称及存储过程内容
SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%你要查找的内容%'
AND ROUTINE_TYPE='PROCEDURE'
-----------查看某内容来自哪个表里的触发器。
with TR AS (
SELECT name FROM sysobjects o, syscomments s
WHERE o.id = s.id
AND TEXT LIKE '%报错内容%'
AND o.xtype = 'TR'
),
TR_TABLE AS (select triggers.name as TR_NAME,tables.name as TABLE_NAME,triggers.is_disabled as JY_YN,
triggers.is_instead_of_trigger AS TR_TYPE,
case when triggers.is_instead_of_trigger = 1 then 'INSTEAD OF'
when triggers.is_instead_of_trigger = 0 then 'AFTER'
else null
end as TR_MS
from sys.triggers triggers
inner join sys.tables tables on triggers.parent_id = tables.object_id
where triggers.type ='TR'
--order by triggers.create_date
)
select * from tr a
left join tr_table b on a.name=tr_name