我想搜索所有存储过程以查找子串“x”的出现,我可以这样做吗 SQL 2000? 2005年? 2008?
..没有任何插件?
如果没有,每个最好的免费添加内容是什么?
对不起。我应该提到我知道如何使用sysobjects数据来做到这一点。但在我看来,在这个功能面前应该有一个很好的GUI!
例如,像这样:
答案 0 :(得分:2)
还回答了here
来自http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=32319
CREATE PROCEDURE sp_FindText @text varchar(8000), @findtype varchar(1)='P' AS
SET NOCOUNT ON
IF @findtype='P' SELECT DISTINCT Len(SubString(text,1, PatIndex('%' + @text + '%', text)))-Len(Replace(SubString(text,1, PatIndex('%' + @text + '%', text)),char(13),''))+1 AS Line,
--PatIndex('%' + @text + '%', text) AS Position,
OBJECT_NAME(id) AS ProcName
FROM syscomments
WHERE text like '%' + @text + '%'
ORDER BY ProcName, Line
IF @findtype='C' EXEC('SELECT TABLE_NAME + ''.'' + COLUMN_NAME AS TableColumn FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE ''%' + @text + '%'' ORDER BY TableColumn')
IF @findtype='T' EXEC('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE ''%' + @text + '%'' ORDER BY TABLE_NAME')
GO
它不仅搜索过程和视图定义文本,还会查找表,视图和列名称:
EXEC sp_FindText 'myTable' --or-- EXEC sp_FindText 'myTable', 'P' --finds procedures/views containing 'myTable' in their definition/code
EXEC sp_FindText 'myTable', 'T' --finds tables/views containing 'myTable' in their name
EXEC sp_FindText 'myCol', 'C' --finds columns containing 'myCol' in their name
答案 1 :(得分:1)
对于SQL Server 2005和2008,使用提供nvarchar(max)输出的sys.sql_modules或OBJECT_DEFINITION
SELECT OBJECT_NAME(object_id) FROM sys.sql_modules WHERE definition LIKE @MyString
SELECT name FROM sys.objects WHERE OBJECT_DEFINITION(object_id) LIKE @MyString
对于SQL Server 2000,您必须使用sycomments或INFORMATION_SCHEMA.ROUTINES,但它们提供nvarchar(4000),因此不可靠。你必须将sys.comments连接成一个文本值并搜索它(坦率地说,我已经忘记了如何做到这一点)
提出完全相同问题的其他问题
答案 2 :(得分:0)
如果我是你我不会使用工具 - 只需运行一个脚本来搜索你,即,以下SQL脚本将在数据库中搜索所有存储过程中的字符串
Declare @search varchar(128)
SET @search = '%' + 'search text' + '%'
/***************************************************************************/
SELECT o.name As "Stored Procedures"
FROM SYSOBJECTS o INNER JOIN SYSCOMMENTS c
ON o.id = c.id
WHERE c.text LIKE @search
AND o.xtype = 'P'
GROUP BY o.name
ORDER BY o.name
/**************************************************************************/
在这种情况下,xtype“P”指的是存储过程