Просмотр связанных серверных зависимостей sql server 2008 - PullRequest
7 голосов
/ 23 июня 2011

Кто-нибудь знает, как / если можно просмотреть все таблицы / представления / хранимые процедуры, которые зависят от связанного сервера в Sql Server 2008. В основном, как если бы контекстное меню «Просмотр зависимостей» было доступно для связанных серверов?

Любая помощь высоко ценится.

Спасибо

Ответы [ 3 ]

16 голосов
/ 23 июня 2011

Поиск

SELECT OBJECT_NAME(object_id), *
FROM sys.sql_modules
WHERE definition LIKE '%myLinkedServer%'

Или используйте free Red Gate SQL Search , чтобы сделать то же самое с графическим интерфейсом

Нет таблицы или функции, которая отслеживала бы зависимости между объектами сервера на уровне сервера и объектами уровня базы данных

Примечание. Представления INFORMATION_SCHEMA и устаревшие системные комментарии усекают определение, поэтому они ненадежны для поиска определений.

7 голосов
/ 18 июня 2014

Следуя предложению @Mitch Wheat, вот несколько sql для запуска ответа @ gbn для всех БД на сервере. Может быть, это будет немного времени для кого-то.

USE Master;
GO

IF OBJECT_ID('tempdb..#Deps') IS NOT NULL
  BEGIN
    DROP TABLE #Deps
  END

CREATE TABLE #Deps
  (
    [ServerName] [VARCHAR](500) NOT NULL,
    [DatabaseName] [VARCHAR](500) NOT NULL,
    [SchemaName] [VARCHAR](500) NOT NULL,
    [ObjectName] [VARCHAR](MAX) NULL,
    [ObjectId] [INT] NOT NULL,
    [ObjectType] [VARCHAR](500) NOT NULL,
    [DependsOnLinkedServer] [VARCHAR](500) NOT NULL,    
    [definition] [VARCHAR](MAX) NULL
  )

IF OBJECT_ID('tempdb..#Queries') IS NOT NULL
  BEGIN
    DROP TABLE #Queries
  END

SELECT
  REPLACE('INSERT INTO #Deps 
     (
       [ServerName]       
       ,[DatabaseName]
       ,[SchemaName]
       ,[ObjectName]
       ,[ObjectType]
       ,[ObjectId]
       ,[DependsOnLinkedServer]
       ,[definition]
     )
     SELECT
       @@SERVERNAME,
       ''?'' AS DatabaseName,
       s.name AS SchemaName,
       o.name AS ObjectName,
       o.type_desc AS ObjectType,
       m.object_id AS ObjectId,
       ''' + srv.name + ''' AS DependsOnLinkedServer,
       m.definition
     FROM
       [?].sys.sql_modules m
       LEFT OUTER JOIN [?].sys.objects o
       ON m.object_id = o.object_id
       LEFT OUTER JOIN [?].sys.schemas s
       ON o.schema_id = s.schema_id
     WHERE     
       definition LIKE ''%' + srv.name + '%''', CHAR(13) + CHAR(10), '') AS Query
INTO
  #Queries
FROM
  sys.servers srv;
GO

DECLARE @Query AS VARCHAR(MAX)
DECLARE LinkedServerCursor CURSOR FAST_FORWARD
FOR
  SELECT
    Query
  FROM
    #Queries

OPEN LinkedServerCursor
FETCH NEXT FROM LinkedServerCursor INTO @Query;

WHILE @@FETCH_STATUS = 0
  BEGIN  
    EXECUTE master.sys.sp_MSforeachdb @Query

    FETCH NEXT FROM LinkedServerCursor INTO @Query;
  END

CLOSE LinkedServerCursor;
DEALLOCATE LinkedServerCursor; 

GO

SELECT
  ServerName,
  DatabaseName,
  ObjectName,
  '[' + ServerName + '].[' + DatabaseName + '].[' + SchemaName + '].[' + ObjectName + ']' AS QualifiedObjectName,
  DependsOnLinkedServer,
  ObjectType  
FROM
  #Deps
ORDER BY
  ServerName,
  DatabaseName,
  ObjectName
0 голосов
/ 21 января 2016

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

WHERE     
definition LIKE ''%\[' + srv.name + '\].%''
or definition LIKE ''%' + srv.name + '.%''', CHAR(13) + CHAR(10), '') AS Query
...