2009-11-18 1 views
0

Я пытаюсь обновить таблицу на нескольких удаленных серверах путем повторения списка имен серверов и выполнения некоторого динамического SQL. Смотри ниже.Невозможно использовать полное имя таблицы в динамическом SQL

DECLARE @Sql NVARCHAR(4000) 
DECLARE @Server_Name VARCHAR(25) 
SET @Server_Name='SomeServer' 

SET @Sql='UPDATE ' + @Server_Name + '.dba_sandbox.dbo.SomeTable SET SomeCol=''data''' 
PRINT @Sql 
EXEC @Sql 

Который производит следующий вывод:

UPDATE SomeServer.dba_sandbox.dbo.SomeTable SET SomeCol='data' 
Msg 7202, Level 11, State 2, Line 7 
Could not find server 'UPDATE SomeServer' in sysservers. Execute sp_addlinkedserver to add the server to sysservers. 

Теперь SomeServer является связанный сервер. Если я выполняю распечатанный SQL-оператор, он отлично работает. Также обратите внимание, что в сообщении об ошибке он считает, что удаленный сервер «UPDATE SomeServer», а не «SomeServer».

ответ

1

Как об использовании: скобках

EXEC(@sql); 
0

Вы пробовали скобки?

[SomeServer].[dba_sandbox].[dbo].[SomeTable]

0

Не уверен, что вызывает его, но вы пробовали создать обновление в этой форме:

Обновление набор somecol = «данные» из someserver.dba_sandbox.dbo.SomeTable