以下代码似乎没有搜索整个例程定义。
代码块1:
select top 50 * from information_schema.routines
where routine_definition like '%09/01/2008%' and specific_Name like '%NET'
代码块2:
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%EffectiveDate%' AND ROUTINE_TYPE='PROCEDURE' and ROUTINE_NAME like '%NET'
我知道在大多数情况下这些SQL都可以工作。问题是这样的:当我为“EffectiveDate”运行它时,它在一些存储过程中被埋在~800行,这些存储过程从未出现在结果中。就像“喜欢”只搜索如此深刻。
有关解决此问题的任何提示吗?
我想在ENTIRE存储过程中搜索指定的文本。
谢谢!
答案 0 :(得分:10)
select *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE OBJECTPROPERTY(OBJECT_ID(SPECIFIC_NAME),'IsMSShipped') =0
and OBJECT_DEFINITION(OBJECT_ID(SPECIFIC_NAME)) like '%EffectiveDate%'
AND ROUTINE_TYPE='PROCEDURE'
AND ROUTINE_NAME like '%NET'
改为使用对象定义。
答案 1 :(得分:8)
只是澄清为什么procedure text is truncated:
ROUTINE_DEFINITION nvarchar(4000)
返回前4000个字符 函数的定义文本或 存储过程如果函数或 存储过程未加密。 否则,返回NULL。
确保您获得完整 定义,查询
OBJECT_DEFINITION
功能或 中的定义列sys.sql_modules
目录视图。
答案 2 :(得分:2)
如果您正在寻找针对SQL Server数据库的搜索功能,那么这是不同的方法。基本上是RedGate免费提供的搜索工具。
答案 3 :(得分:0)
非常快,生活和方便 直接链接 http://www.red-gate.com/products/SQL_Search/index.htm