2016-11-18 2 views
1

Возможно ли это, Не работает! Попытка для того чтобы достигнуть исполнения ордеровSQL динамический запрос с синонимом

Declare @SQL as varchar(1000) 

Set @SQL = 'Select ''create synonym syn_'' + t.name + '' for ['' + 
DB_NAME() + ''].[''+ s.name + ''].['' + t.name + '']'' 

from sys.tables t 
    inner join sys.schemas s 
     on t.schema_id = s.schema_id 
where t.type = ''U'' and t.name in 

(''Episode'',''MasterNPI'',''Patient'',''Enterprises'')' 

Print @SQL 
+0

ум говорит нам, что это на самом деле пытается сделать, и то, что случилось с ним? – DForck42

ответ

2

Вы полностью получили это неправильно. Вы выполнили запрос select, он не будет создавать synonym.

Вот то, что вы ищете

DECLARE @SQL AS VARCHAR(1000) 

SET @sql = (SELECT ' create synonym syn_' + t.NAME + ' for ' 
        + Quotename(Db_name()) + '.' + Quotename(s.NAME) 
        + '.' + Quotename(t.NAME) + ' ; ' 
      FROM sys.tables t 
        INNER JOIN sys.schemas s 
          ON t.schema_id = s.schema_id 
      WHERE t.type = 'U' 
        AND t.NAME IN ('Episode', 'MasterNPI', 'Patient', 
            'Enterprises') 
      FOR xml path('')) 

EXEC(@SQL)