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'
這個職位可能會幫助:http://stackoverflow.com/questions/4050331/sql -server-linked-database-aliases – bsivel
你可以使用SQLCMD或管理你的代碼是SSDT嗎?它在處理這樣的環境方面做得非常好。 –