2015-05-04 3 views
0

Работа с SQL Server 2008 R2. У меня есть сценарий, полный следующие утверждения:Как избежать жесткого кодирования DB-имени в создании синтаксиса SQL

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

Вопрос: 1. Есть ли способ избежать 4 части именования. особенно жестко закодированное имя DB

  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 Name в том же самом заявлении? – shaz

+0

См. Мой отредактированный ответ. Конечно, вы можете преобразовать это в хранимую процедуру. –

+0

Если существует 20 + синоним, необходимо создать 20+ операторов в этом случае? Или каковы наилучшие способы создания нескольких синонимов в одном выражении? – shaz

0

Да, это единственный путь. Для MSDN documentation для синтаксиса создания Synonym требуется имя DB, как показано ниже, если вы не пользуетесь динамическим SQL.

-- SQL Server Syntax 

CREATE SYNONYM [ schema_name_1. ] synonym_name FOR <object> 

<object> :: = 
{ 
    [ server_name.[ database_name ] . [ schema_name_2 ]. object_name 
} 
Смежные вопросы