Судя по недавнему тестированию и чтению, которое я сделал, кажется, что "X" (исключительная) часть имени XLOCK вводит в заблуждение. Фактически он не блокирует больше, чем UPDLOCK. Если бы он был эксклюзивным, это предотвратило бы внешние операции SELECT, чего не происходит.
Я не могу увидеть разницу между ними ни при чтении, ни при тестировании.
Единственный раз, когда XLOCK создает эксклюзивную блокировку, это когда используется с ТАБЛОК. Мой первый вопрос: «Почему только с такой степенью детализации?»
Далее я наткнулся на блог , в котором говорится следующее:
Тем не менее, остерегайтесь подсказки XLOCK. SQL Server будет игнорировать подсказку XLOCK! Есть оптимизация, при которой SQL Server проверяет, изменились ли данные с момента самой старой открытой транзакции. Если нет, то xlock игнорируется. Это делает подсказки xlock в основном бесполезными, и их следует избегать.
Кто-нибудь сталкивался с этим явлением?
Судя по тому, что я вижу, кажется, что эту подсказку следует игнорировать.