Esclusività di X lock vs U serrature
Nella matrice di compatibilità della serratura sottostante si può vedere che la X lock è compatibile solo con i tipi di blocco di stabilità dello schema e Inserisci intervallo-Null. U è compatibile con i seguenti tipi di blocco condiviso aggiuntivi S /IS /RS-S /RI-S /RX-S
bloccare la matrice di compatibilità https://i.msdn.microsoft.com/ms186396.LockConflictTable(en-us,SQL.105).gif
Granularità di X serrature
Questi sono tirati fuori bene a tutti i livelli. La traccia dello script e del profiler di seguito mostra che sono stati eliminati correttamente a livello di riga.
CREATE TABLE test_table (id int identity(1,1) primary key, col char(40))
INSERT INTO test_table
SELECT NEWID() FROM sys.objects
select * from test_table with (rowlock,XLOCK) where id=10

Ma le righe possono ancora essere lette!
Si scopre che in read committed livello di isolamento SQL Server non eliminerà sempre S lock, salterà questo passaggio se non c'è il rischio di leggere i dati non vincolati senza di essi. Ciò significa che non vi è alcuna garanzia che si verifichi un conflitto di blocco.
Tuttavia, se la selezione iniziale è with (paglock,XLOCK) allora questo farà interrompere la transazione di lettura come X il blocco della pagina bloccherà il IS blocco della pagina che sarà sempre necessario al lettore. Ciò avrà ovviamente un impatto sulla concorrenza.
Altre avvertenze
Anche se blocchi la riga/pagina, ciò non significa che blocchi tutti gli accessi a quella riga nella tabella. Un blocco su una riga nell'indice cluster non impedirà alle query di leggere i dati dalla riga corrispondente in un indice non cluster di copertura.