2012-06-26 89 views
0

我已經負責將數據庫從ServerA移動到ServerB的任務。 ServerB包含許多其他數據庫對象,少數幾個使用鏈接服務器連接到ServerA。例如,可能有一個視圖,將ServerB上的table1連接到ServerA.database.schema.table1刪除對SQL Server 2008 R2上的鏈接服務器的所有引用

有誰知道我可以在ServerB上運行的腳本,它將顯示引用ServerA的所有對象的列表,因此我可以快速更新它們,而無需打開每個對象。

我希望這是有道理的。由於

回答

4

這對誤報的可能性,但是這可能是不是依賴於依賴的看法(這將錯過動態SQL或乾脆出過期依賴)更好:

SELECT 'EXEC sp_helptext ''' 
+ QUOTENAME(OBJECT_SCHEMA_NAME([object_id])) 
+ '.' + QUOTENAME(OBJECT_NAME([object_id])) + ''';' 
FROM sys.sql_modules 
WHERE definition LIKE '%ServerA.%'; 

您可能還需要考慮到其中的服務器名稱是用方括號括可能病例:

OR definition LIKE '%\[ServerA\].%' ESCAPE '\'; 

你也應該考慮使用SYNONYMs,以防止今後這種類型的維護。事實上,您可能還想檢查引用服務器名稱的任何同義詞:

SELECT name, base_object_name 
    FROM sys.synonyms 
    WHERE base_object_name LIKE 'ServerA.%' 
    OR base_object_name LIKE '\[ServerA\].%' ESCAPE '\'; 
+0

謝謝,這是非常理想的答案,據我所知 –

相關問題