0

次のように、リンク サーバー (SQL Server 2005) で 3 つの動的 SQL ステートメントを同期的に実行する必要があります。

declare @statement nvarchar(max);

set @statement = 'exec ' + @server_name + '.' + @database_name + '.dbo.Foo;exec ' + @server_name + '.' + @database_name + '.dbo.Bar;exec ' + @server_name + '.' + @database_name + '.dbo.BigTime';

exec sp_executesql @statement;

これをテストするために、それ自体にリンクするリンク サーバーのセットアップがあります。

このローカルを (を削除して@server_name) 実行すると、SQL プロファイラーを使用して、1 つのステートメントとして問題なく実行されることがわかります。ただし、リンク サーバー経由で (@server_name変数を使用して) これを実行すると、SQL プロファイラーで、各ステートメントが個別に実行され、各ステートメントのsp_reset_connection後に実行されることがわかります。

トレースは次のようになります。

Audit Login ....
exec database.dbo.Foo
exec sp_reset_connection
Audit Logout
Audit Login ....
exec database.dbo.Bar
exec sp_reset_connection
Audit Logout
Audit Login ....
exec database.dbo.BigTime
exec sp_reset_connection
Audit Logout

これは私に問題を引き起こしています。sp_reset_connectionステートメント間で呼び出さないように SQL Server に指定できる理由はありますか?

4

5 に答える 5

1

3 つのリンク サーバーに対して 3 つの呼び出しを実行しています。結果はまさに期待どおりです (3 つのリンク サーバーが異なっていても)。説明したことを達成するには、説明したとおりに呼び出しを実行します。1 つのリンク サーバーで 3 つの手順を実行します。

linkedserver.master.dbo.sp_ExecuteSQL N'
  exec dbname.dbo.Foo; 
  exec dbname.dbo.Bar; 
  exec dbname.dbo.BigTime;';

これを動的に構築された SQL でラップするだけです。

declare @remoteStatement nvarchar(max), @localStatement nvarchar(max);
set @remoteStatement = N'exec ' + @database_name + N'.dbo.Foo; 
    exec ' + @database_name + N'.dbo.Bar; 
    exec '+ @database_name + N'.dbo.BigTime';
set @localStatement = @server_name + N'.master.dbo.sp_executesql @remoteStatement;';

exec sp_executesql @localStatement, N'@remoteStatement nvarchar(max)', @remoteStatement;
于 2009-11-19T23:47:27.780 に答える
0

これは役立つかもしれません:

BEGIN DISTRIBUTED TRANSACTION
 your stuff here
COMMIT TRANSACTION

このためには、分散トランザクション コーディネーターが実行されている必要があります。

于 2009-11-19T23:47:28.457 に答える
0

Remus の回答によると、sp_setnetname. YMMV。

これは 1 日か 2 日前に尋ねられました:リモート サーバーにアクセスするための SP_ExecuteSql を使用した完全修飾テーブル名

于 2009-11-20T05:00:29.497 に答える
0

他の3つを呼び出すリンクサーバー上に単一のSPを作成してから、それを呼び出すことはできませんか?

リセット接続が問題を引き起こすのはなぜですか? 各 SP は、一時テーブルなどの特別な種類の接続永続ストレージを使用していますか?

于 2009-11-19T23:34:13.317 に答える