2015-11-12 25 views
1

我有一個測試數據庫和一個開發數據庫。現在我需要所有腳本的兩個版本,因爲我有一個鏈接服務器,並且由於數據庫具有不同的名稱,名稱之間的名稱會發生​​變化。鏈接服務器在維護構建腳本時造成麻煩

人們如何解決這個問題?我們討論了構建任務以尋找替代品,但我希望能有更好的更優雅的方式。

+0

這個職位可能會幫助:http://stackoverflow.com/questions/4050331/sql -server-linked-database-aliases – bsivel

+0

你可以使用SQLCMD或管理你的代碼是SSDT嗎?它在處理這樣的環境方面做得非常好。 –

回答

1

您可以爲需要替代完全限定語句的對象創建同義詞。例如:

SELECT * FROM [linked_server_name].[test_database_name].[dbo].[table_1] 

...它由以下段...

[linked server].[database].[schema].[object] 

由於這是相當冗長,您可以通過發出上方創建從例子中的對象的代名詞以下:

CREATE SYNONYM [dbo].[table_1] FOR [linked_server_name].[test_database_name].[dbo].[table_1] 

......和您的查詢就會變成:

SELECT * FROM [dbo].[table_1] 

您可以生成與下面的腳本您的數據庫中所有表的代名詞,它替換爲對象名稱:

SELECT 'CREATE SYNONYM ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + ' FOR [SQL-SOURCE1].' + QUOTENAME(TABLE_CATALOG) + '.' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) 
    FROM [linked_server_name].[test_database_name].[INFORMATION_SCHEMA].Tables 
    WHERE TABLE_TYPE = 'BASE TABLE'