Если вы не используете SQL Server 2008 и более поздние версии и задаете LOCK_ESCALATION = Disabled, вы можете забыть о подсказке ROWLOCK.SQL Server может, и по своему опыту, вероятно, проигнорирует его и возьмет любую блокировку (страницу или таблицу), которую он заполняет.До SQL Server 2008 нет подсказок о принудительной блокировке.
Очистив это, вы можете использовать SET LOCK_TIMEOUT -1
для указания бесконечного тайм-аута.
Я настоятельно не рекомендую вам делать это, вместо этого попробуйтеустранять неполадки и оптимизировать (если вы несете за это ответственность) запросы, которые действительно должны блокировать эту таблицу, максимально ускорить их, чтобы сократить время блокировки.
Мониторинг заблокированных ресурсов с помощью EXEC sp_lock TargetSPID
дляпроверить, какие блокировки действительно выполняются
Еще одно замечание: SET LOCK_TIMEOUT устанавливает тайм-аут для текущего соединения. Если вы используете пул соединений, вы устанавливаете тайм-аут блокировки для всего, что повторно использует это соединение, возможно, вызываянепреднамеренное поведение в вашем приложении