美好的一天,我特意尝试通过我的存储过程进行搜索,目的是找到一个不包含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'。无论如何我能实现这个目标吗?也很抱歉我无法解释清楚。任何帮助将不胜感激
答案 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%'))