2015-05-04 24 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 
}