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

时间:2013-11-22 03:44:25

标签: sql sql-server stored-procedures full-text-search

美好的一天,我特意尝试通过我的存储过程进行搜索,目的是找到一个不包含cetain字的过程。示例“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”。我希望搜索执行到程序结束,并且存在“TABLE NAME”,“mykeyword”必须跟随,否则返回没有“mykeyword”的程序名称。

由于我想要使用十二个表名,我想我可以使用像

这样的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%'. 

这对我来说不太合适,因为我的表名很少,而且表名可能会在程序中出现很多次,而且可能只是第一次使用'keyword'。无论如何我能实现这个目标吗?也很抱歉我无法解释清楚。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

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

  

块引用   因为我的表名很少,而且表名可能会在程序中出现很多时间

难道你不能只使用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'

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

答案 1 :(得分:0)

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

找到与之匹配的程序,然后排除它们?

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