Sql server 如何grep SQL Server存储过程?

Sql server 如何grep SQL Server存储过程?,sql-server,stored-procedures,powershell,grep,Sql Server,Stored Procedures,Powershell,Grep,我希望对给定SQL Server数据库中的所有存储过程运行一个标准(假设为2005年或更高版本)。我发现了各种简单的查询来列出包含特定对象的存储过程的名称,例如 SELECT Name FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%table_I_want_to_find%' 但我真正想要的是,像grep一样,列出已识别存储过程中的特定行(这样我就不必手动打开每一行并查看它是否是我正在寻找的) 我乐于使用T-SQL或

我希望对给定SQL Server数据库中的所有存储过程运行一个标准(假设为2005年或更高版本)。我发现了各种简单的查询来列出包含特定对象的存储过程的名称,例如

SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%table_I_want_to_find%'
但我真正想要的是,像grep一样,列出已识别存储过程中的特定行(这样我就不必手动打开每一行并查看它是否是我正在寻找的)

我乐于使用T-SQL或PowerShell中的解决方案,甚至是现成的实用程序。

您可以使用它将存储过程DDL转储到文件中,然后对其使用grep


这里有一些提取DDL(称为脚本)的示例。

使用。这是一个免费的工具,非常棒

我是SQL Server的新手,但下面的内容似乎非常有效,已经证明非常有用。我正在使用SQLServer2008

select ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_BODY, ROUTINE_DEFINITION
from INFORMATION_SCHEMA.ROUTINES
where ROUTINE_DEFINITION like '%searchtext%'
order by ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION;
为了完整起见,以下是一些您可能想了解的类似查询:

exec sp_help 'myTable'

select name
from sys.all_views
order by name;

select TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE
from INFORMATION_SCHEMA.TABLES
order by TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE;

select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE
from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME = 'myColumn'
order by TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME;

+1个借调-很棒的工具,也是免费的!不可或缺!我同意,伊卡洛斯。我完全忘记了RedGate的优秀工具——它正是我所需要的。如果存储过程的长度超过8000个字符,则不会超过8000个限制。发生在我身上。。。相反,使用sys.whatever中的object_definition(object_id),它有varchar(max)1)第一个解决方案找到包含搜索字符串ok的过程。2) 然后将所有例程定义粘贴到记事本++中,记事本是免费的3)Ctrl-F进行搜索,“查找当前文档中的所有内容”会给出带有数字的行。4) 双击一行,返回5)向后搜索进程名称。注意Stefan的警告:“这是一个名为sp_grep的存储过程解决方案。”这是一个名为sp_grep的存储过程解决方案。