2015-05-04 27 views
0

使用SQL Server 2008 R2。我有一個腳本充滿下面的語句:如何避免在SQL同義詞創建中硬編碼DB名稱

create synonym [synonym_name] for [linkedServerName].[databaseName].[ext].[tableName1] 
create synonym [synonym_name] for [linkedServerName].[databaseName].[ext].[tableName2] 

問: 1.請問有什麼辦法可以避免4部分的命名。特別是硬編碼的數據庫名稱

  1. 有一個用於LinkedServer創建的現有腳本。這可以在創建同義詞時使用嗎?

  2. 什麼是最好的方式來創建多個表/視圖的同義詞?

    declare @Server sysname, 
    @db sysname, 
    @Schema sysname, 
    @Table sysname, 
    @statement varchar(max) 
    
    SELECT @Server = 'Venice', 
    @db = 'venice1', 
    @Schema = 'ext' 
    
    EXEC('CREATE SYNONYM synonym_name1 FOR '+ @Server +'.'+ @db +'.' + @Schema + '.Table1') 
    EXEC('CREATE SYNONYM synonym_name2 FOR '+ @Server +'.'+ @db +'.' + @Schema + '.Table2') 
    

思考:這是唯一的辦法?

+1

是的,因爲這就是同義詞的語法。 – Rahul

+1

據我所知,確實是這樣做的唯一方法 –

+0

我是這麼認爲的。謝謝。 – shaz

回答

1

試試這個:

declare @Server sysname, 
     @db sysname, 
     @Schema sysname, 
     @Table sysname, 
     @statement varchar(max) 

SELECT @Server = 'ServerName', 
     @db = 'DatabaseName', 
     @Schema = 'SchemaName', 
     @Table = 'TableName' 

set @statement = 'CREATE SYNONYM synonym_Name FOR '+ 
        @Server +'.'+ 
        @db +'.' + 
        @Schema + '.' + 
        @Table 

EXEC (@statement) 
+0

假設,在同一條語句上,LinkedServer名稱也一樣? – shaz

+0

看到我編輯的答案。當然,您可以將其轉換爲存儲過程。 –

+0

如果需要創建20多個同義詞,那麼在這種情況下是否應該有20多個語句?或者在同一個陳述中創建多個同義詞的最佳方法是什麼? – shaz

0

是的,這是唯一的辦法。每MSDN documentationSynonym創建語法需要DB名稱,如下所示,除非您正在接受動態SQL的幫助。

-- SQL Server Syntax 

CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object> 

<object> :: = 
{ 
    [ server_name.[ database_name ] . [ schema_name_2 ]. object_name 
}