我需要在链接服务器(SQL Server 2005)上同步执行三个动态 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 Profiler 我看到它作为一个语句执行得很好。但是,当我通过链接服务器(使用@server_name
变量)执行此操作时,我在 SQL Profiler 中看到每个语句都单独执行,并在每个语句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
这给我带来了问题。为什么我可以指定 SQL Serversp_reset_connection
在语句之间不调用?