2009-11-18 20 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

0

這個問題是我用

EXEC @Sql 

Exec(@sql) 
相關問題