0

我正在尝试通过迭代服务器名称列表并执行一些动态 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

4 回答 4

1

如何使用括号:

EXEC(@sql);
于 2009-11-18T19:39:34.437 回答
0

你试过括号吗?

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

于 2009-11-18T19:36:23.840 回答
0

不确定是什么原因造成的,但您是否尝试过以这种形式创建更新:

从 someserver.dba_sandbox.dbo.SomeTable 更新一组 somecol = 'data'

于 2009-11-18T19:38:26.630 回答
0

问题是我正在使用

EXEC @Sql

不是

Exec(@sql)
于 2009-11-18T19:39:29.740 回答