Я только что проверил это в сценарии, который вы описали (от 2k5 до 2k5, разные базы данных на разных физических машинах), используя подсказку NOLOCK
, когда SQL Profiler запущен на компьютере, на который указывает связанный сервер. Трассировка показывает, что подсказка сохраняется в запросе, выполненном на связанном сервере.
Я побежал
select 1 from server.master.dbo.sysobjects with (nolock)
и обнаружил следующее в следе:
declare @p1 int
set @p1=4
exec sp_prepexec @p1 output,NULL,N'SELECT (1) "Expr1003" FROM "master"."dbo"."sysobjects" "Tbl1002" WITH (NOLOCK)'
select @p1
Я подозреваю, что это особенность драйвера SQLNCLI
, нового в SQL 2005, поскольку подсказки, безусловно, не сохранялись в запросах связанных серверов в SQL 2000.
Возможно, стоит попробовать подсказку NOLOCK
в вашем запросе, хотя вы должны знать, что вы, вероятно, получаете грязные данные из строк, которые обновляются при выполнении запроса. Это может быть или не быть проблемой, в зависимости от того, как используются ваши данные.