Инструмент поиска кода SQL Server - PullRequest
0 голосов
/ 18 ноября 2009

Я хотел найти во всех хранимых процедурах вхождение подстроки "x", могу ли я сделать это в SQL 2000? 2005? 2008

.. без каких-либо надстроек?

Если нет, каковы лучшие бесплатные надстройки для каждого?

Извините. Я должен был упомянуть, что я знаю, как использовать данные sysobjects для этого. Но мне кажется, что перед этой функциональностью должен быть хороший графический интерфейс!

НА ПРИМЕРЕ, Примерно так:

http://screencast.com/t/Y2Q0YmU0Nzkt

Ответы [ 3 ]

2 голосов
/ 18 ноября 2009

Также ответили здесь

С 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 голос
/ 18 ноября 2009

Для SQL Server 2005 и 2008 используйте sys.sql_modules или OBJECT_DEFINITION , которые предоставляют вывод nvarchar (max)

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 в текстовое значение и найти его (и, честно говоря, я забыл, как это сделать, не задумываясь)

Другие вопросы, где упоминается точно такая же проблема

0 голосов
/ 18 ноября 2009

на вашем месте я бы не использовал инструмент - просто запустите скрипт, чтобы выполнить поиск, т. Е. Следующий скрипт 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' относится к хранимым процедурам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...