Как найти текст в процедурах SQL Server / триггеры?

У меня есть linkedserver, который изменится. Некоторые процедуры называют связанный сервер как это: [10.10.100.50].dbo.SPROCEDURE_EXAMPLE. У нас есть триггеры, также делающие этот вид работы. Мы должны найти все места, который использует [10.10.100.50] изменить его.

В SQL Server Management Studio Express я не нашел, что функция как "находит в целой базе данных" в Visual Studio. Специальный sys-выбор может помочь мне найти то, в чем я нуждаюсь?

169
задан Ryan Kohn 29 August 2012 в 19:30
поделиться

3 ответа

вот часть процедуры, которую я использую в своей системе для нахождения текста....

DECLARE @Search varchar(255)
SET @Search='[10.10.100.50]'

SELECT DISTINCT
    o.name AS Object_Name,o.type_desc
    FROM sys.sql_modules        m 
        INNER JOIN sys.objects  o ON m.object_id=o.object_id
    WHERE m.definition Like '%'+@Search+'%'
    ORDER BY 2,1
296
ответ дан JumpingJezza 23 November 2019 в 20:51
поделиться

Я использовал их в прошлом:

В данном случае, где необходимо заменить определенную строку через хранимые процедуры, первая ссылка, вероятно, более релевантна.

Немного вне темы дополнение Быстрого поиска также полезно для поиска имен объектов с Studio управления SQL Server. Существует измененная версия, доступная с некоторыми улучшениями и другой более новой версией, также доступной на Codeplex с некоторыми другими полезными дополнениями также.

0
ответ дан Mun 23 November 2019 в 20:51
поделиться

Я использую этого для работы. кончите [], хотя в @TEXT поле, кажется, хочет возвратить все...

SET NOCOUNT ON

DECLARE @TEXT   VARCHAR(250)
DECLARE @SQL    VARCHAR(250)

SELECT  @TEXT='10.10.100.50'

CREATE TABLE #results (db VARCHAR(64), objectname VARCHAR(100),xtype VARCHAR(10), definition TEXT)

SELECT @TEXT as 'Search String'
DECLARE #databases CURSOR FOR SELECT NAME FROM master..sysdatabases where dbid>4
    DECLARE @c_dbname varchar(64)   
    OPEN #databases
    FETCH #databases INTO @c_dbname   
    WHILE @@FETCH_STATUS  -1
    BEGIN
        SELECT @SQL = 'INSERT INTO #results '
        SELECT @SQL = @SQL + 'SELECT ''' + @c_dbname + ''' AS db, o.name,o.xtype,m.definition '   
        SELECT @SQL = @SQL + ' FROM '+@c_dbname+'.sys.sql_modules m '   
        SELECT @SQL = @SQL + ' INNER JOIN '+@c_dbname+'..sysobjects o ON m.object_id=o.id'   
        SELECT @SQL = @SQL + ' WHERE [definition] LIKE ''%'+@TEXT+'%'''   
        EXEC(@SQL)
        FETCH #databases INTO @c_dbname
    END
    CLOSE #databases
DEALLOCATE #databases

SELECT * FROM #results order by db, xtype, objectname
DROP TABLE #results
0
ответ дан Christopher Klein 23 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: