Невозможно использовать полное имя таблицы в динамическом SQL - PullRequest
0 голосов
/ 18 ноября 2009

Я пытаюсь обновить таблицу на нескольких удаленных серверах, перебирая список имен серверов и выполняя динамический 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».

Ответы [ 4 ]

1 голос
/ 18 ноября 2009

Как насчет использования паразитов:

EXEC(@sql);
0 голосов
/ 18 ноября 2009

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

обновить установить somecol = 'данные' from someserver.dba_sandbox.dbo.SomeTable a

0 голосов
/ 18 ноября 2009

Проблема была в том, что я использовал

EXEC @Sql

Не

Exec(@sql)
0 голосов
/ 18 ноября 2009

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

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

...