Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何对所有存储过程定义执行全文搜索_Sql_Sql Server_Stored Procedures_Full Text Search - Fatal编程技术网

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

Sql 如何对所有存储过程定义执行全文搜索,sql,sql-server,stored-procedures,full-text-search,Sql,Sql Server,Stored Procedures,Full Text Search,您好,我特别尝试通过我的storedprocedures执行搜索,目的是找到一个不包含cetain单词的过程。例如“nolock” 我理解,并且通过下面的查询成功地实现了这一点 Select Name as [Procedurees with no nolock] from database.sys.procedure WHERE (OBJECT_DEFINITION(OBJECT_ID) NOT LIKE '%myKeyword%' . 上述操作成功返回了过程名称,但其中没有关键字

您好,我特别尝试通过我的storedprocedures执行搜索,目的是找到一个不包含cetain单词的过程。例如“nolock”

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

   Select Name as [Procedurees with no nolock] from 
database.sys.procedure WHERE (OBJECT_DEFINITION(OBJECT_ID) 
NOT LIKE '%myKeyword%' .
上述操作成功返回了过程名称,但其中没有关键字。但是,存储过程脚本大多很长,可能需要在单个过程中多次使用关键字。示例可能在每个“fromtable name”后面,我需要一个关键字“with nolock”。我希望搜索一直执行到过程结束,如果存在“表名”,则必须在后面加上“mykeyword”,否则返回没有“mykeyword”的过程名

因为我有12个我想使用的表名,所以我想我可以使用CASE-like

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

这对我来说并不合适,因为我有很多表名,而且表名可能会在过程中多次出现,并且可能只是第一次出现“关键字”。请问我有没有办法做到这一点?也很抱歉我不能解释清楚。任何帮助都将不胜感激

对不起,但你的问题对我来说毫无意义。但我会尽力回答

大宗报价 因为我有相当多的表名,而且表名也可能在过程中多次出现

您不能只使用分组方式将结果限制为每个表一组吗

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%'))

我关心的是,我使用上面的查询是搜索整个脚本,还是在遇到关键字时立即退出脚本?谢谢,这是另一种方法,它可以工作。但我的问题是,这是搜索整个过程文本,还是在遇到关键字时退出?e、 假设过程中有三个“with”,如何使用它来标识整个三个,而不是在遇到第一个“with”时立即返回过程名称?