我正在尝试通过迭代服务器名称列表并执行一些动态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”。
答案 0 :(得分:1)
如何使用括号:
EXEC(@sql);
答案 1 :(得分:0)
你试过括号吗?
[SomeServer].[dba_sandbox].[dbo].[SomeTable]
答案 2 :(得分:0)
不确定是什么导致了它,但您是否尝试过以这种形式创建更新:
更新a 设置somecol ='data' 来自someserver.dba_sandbox.dbo.SomeTable a
答案 3 :(得分:0)
问题是我正在使用
EXEC @Sql
不
Exec(@sql)