次のように、リンク サーバー (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 に指定できる理由はありますか?