如何对所有存储过程定义执行全文搜索



您好,我特别想在我的存储过程中进行搜索,目的是找到一个不包含十六进制单词的过程。示例"nolock"。

我理解并通过下面这样的查询成功地实现了这一点。

   Select Name as [Procedurees with no nolock] from 
database.sys.procedure WHERE (OBJECT_DEFINITION(OBJECT_ID) 
NOT LIKE '%myKeyword%' .

上面成功地返回了不包含关键字的过程的名称。但是,存储过程脚本大多很长,并且可能需要在单个过程中多次使用关键字。示例可能是在每个"FROM TABLE name"之后,我需要一个关键字"with nolock"。我希望搜索一直执行到过程结束,如果存在"表名称",则必须在后面加上"mykeyword",否则将返回没有"mykeywords"的过程名称。

由于我想使用12个表名,我想我可以像一样使用CASE

     Select Name as [Procedurees with no nolock] from database.sys.procedure
 WHERE (OBJECT_DEFINITION(OBJECT_ID) NOT LIKE '%Mytable NAME , then plus the keyword%'. 

这对我来说不太好,因为我的表名很少,而且表名可能在过程中多次出现,并且可能只是第一次使用"关键字"。求你了,我能做到这一点吗?也很抱歉我不能解释清楚。如有任何帮助,将不胜感激

对不起,你的问题对我来说没有任何意义。但我会尽力回答的。

区块报价因为我的表名很少,而且表名可能在过程中多次出现

难道不能只使用GROUP BY将结果限制为每个表一组吗?

Select Name as [Procedurees with no nolock] from database.sys.procedure
WHERE (OBJECT_DEFINITION(OBJECT_ID) NOT LIKE '%Mytable NAME , then plus the keyword%'
GROUP BY database.sys.procedure

如果你想对数据库中的每个表都这样做,你可以使用这个:

DECLARE @keyword NVARCHAR(20) = 'words'
sp_MSForEachTable  'Select Name as [Procedurees with no nolock] from database.sys.procedure
WHERE (OBJECT_DEFINITION(OBJECT_ID) NOT LIKE ? AND  , (OBJECT_DEFINITION(OBJECT_ID)  LIKE ''' + @KeyWord + '''
GROUP BY database.sys.procedure'

?由存储过程中的表名替换。

为什么不把它转过来。。。?

找到确实匹配的过程,然后将其排除在外?

select name from sys.procedures
where name not in (select name from sys.procedures WHERE (OBJECT_DEFINITION(OBJECT_ID) LIKE '%blah%'))

最新更新