2017-11-20 3 views
0

データベース内の特定の列のすべての参照を見つけるためにSQLを書く必要があります。参照を探している列は、別のデータベースに存在します。私は同じデータベース内に存在する列の参照を見つけることのいくつかの例を見つけた:データベース内の特定の列のすべての参照を検索するSQLクエリ?

In SQL Server, how can I find everywhere a column is referenced?

をしかし、私は中に存在する列のためにこれを行う方法を考え出すの問題を抱えています異なるデータベース。このためにSQLを提供できますか?例示の目的のために、のは、私はのように見つけようとしている外部のコラムを参照してみましょう:

MyExternalDB.MyExternalSchema.MyExternalTable.MyExternalColumn 
+0

基本的にはできませんのでごColumnNameには、変数を設定してください。外部依存関係は作成されません。おそらく –

+0

開始点:https://stackoverflow.com/q/12051216/125981 –

答えて

0

[OK]を、ただこれを実行すると、あなたは

USE [master]; 
GO 

IF OBJECT_ID('tempdb..#columns') IS NOT NULL 
    DROP TABLE #columns; 
GO 


CREATE TABLE #columns 
    (databaseName nvarchar(MAX), 
     columnid  int, 
     columnName nvarchar(MAX), 
     objectid  int, 
     objectName nvarchar(MAX)); 

DECLARE @databaseName sysname; 
DECLARE @columnName nvarchar(MAX) = 'ColumnName'; 

DECLARE cur CURSOR LOCAL FORWARD_ONLY STATIC FOR 
    SELECT [name] 
    FROM [sys].[databases] 
    WHERE [state] = 0 
     AND [name] NOT IN ('tempdb', 'master', 'msdb', 'model'); 
OPEN cur; 
FETCH NEXT FROM cur 
INTO @databaseName; 
WHILE (@@FETCH_STATUS != -1) 
    BEGIN; 
     IF (@@FETCH_STATUS != -2) 
      BEGIN; 

       DECLARE @statement nvarchar(MAX); 

       SET @statement =N'Use '+ @databaseName + 
       N'; 
       if EXISTS (SELECT name FROM sys.[columns] WHERE name = ''' + @columnName + ''') 
       BEGIN; 
       INSERT [#columns] ([databaseName], [columnid], [columnName], [objectid], [objectName]) 
         SELECT ''' + @databaseName + N''', 
           c.[column_id], 
           c.[name], 
           o.[object_id], 
           o.[name] 
         FROM sys.[columns] c 
         INNER JOIN sys.[objects] o 
          ON [o].[object_id] = [c].[object_id] 
         WHERE c.[name] = ''' + @columnName + '''; 
         END;'; 

       EXEC [sys].[sp_executesql] @stmt = @statement; 


      END; 
     FETCH NEXT FROM cur 
     INTO @databaseName; 
    END; 
CLOSE cur; 
DEALLOCATE cur; 

SELECT * FROM [#columns]; 
関連する問題