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 ステートメントを実行すると、正常に動作します。また、エラー メッセージでは、リモート サーバーが「SomeServer」ではなく「UPDATE 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 から set somecol = 'data' を更新します

于 2009-11-18T19:38:26.630 に答える
0

問題は私が使用していた

EXEC @Sql

いいえ

Exec(@sql)
于 2009-11-18T19:39:29.740 に答える