Как я могу программно определить, выбирает ли хранимая процедура из другой базы данных? - PullRequest
2 голосов
/ 17 февраля 2010

При установке MS SQL Server 2000 у меня есть множество хранимых процедур, которые извлекают данные из баз данных, отличных от той, в которой они хранятся. Все операции выбора выполняются на одном и том же сервере баз данных.Например:

select * from [OtherDatabase]..table

Как я могу найти, какие процедуры делают подобные вещи, не бросая глаз в глаза?

Ответы [ 2 ]

4 голосов
/ 17 февраля 2010

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

CREATE PROCEDURE FindTextInSP
@StringToSearch varchar(100) 
AS 
   SET @StringToSearch = '%' +@StringToSearch + '%'
   SELECT Distinct SO.Name
   FROM sysobjects SO (NOLOCK)
   INNER JOIN syscomments SC (NOLOCK) on SO.Id = SC.ID
   AND SO.Type = 'P'
   AND SC.Text LIKE @stringtosearch
   ORDER BY SO.Name
GO
1 голос
/ 17 февраля 2010

Подойдет ли этот код ... Вам необходимо временно подключиться к базе данных на другом сервере? Чтобы это сработало, вам нужно быть членом группы 'sysadmin' ... у меня на голове ... это может быть неправильно, не стесняйтесь указать на это ...

USE MASTER
GO

sp_addserver @server='AnotherSQLServer'
USE [AnotherSQLServer].Master
GO

IF EXISTS (SELECT name FROM [AnotherSQLServer].sysobjects WHERE name = 'some_proc' AND type = 'P') 
THEN
    ' DO WHAT YOU HAVE TO DO
    'DROP PROCEDURE some_proc
END
GO

USE MASTER
GO

sp_dropserver @server='AnotherSQLServer'
...