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