当定义太长时,在存储过程定义中搜索字符串将失败



我运行此查询以查找对数据库中存储过程中MyTable的引用:

SELECT ROUTINE_NAME, ROUTINE_DEFINITION, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_DEFINITION LIKE '%MyTable%' 

但是,我没有找到任何东西,问题是ROUTINE_DEFINITION限制为4000个字符,并且对MyTable进行操作的SP更长。在桌子上使用View Dependencies不起作用。

我的问题:当整个存储过程定义超过 4.000 个字符时,有没有办法访问它?

你能试试sysobjectssyscomments

SELECT DISTINCT O.[NAME], C.[text]
FROM sysobjects O
JOIN syscomments C ON C.id = O.id
WHERE C.[text] LIKE '%MyTable%'

更新:按照marc_s的建议,您可以使用sys.procedure和sys.sql_modules来获取定义:

SELECT DISTINCT p.[name], m.[definition]
FROM sys.procedures p 
JOIN sys.sql_modules m ON m.[object_id] = p.[object_id]
WHERE m.[definition] LIKE '%MyTable%'

最新更新