Buna benzeyen bir sorgu gördüğümde bazı engellemeleri araştırıyordum:
SELECT SomeField FROM SomeTable NOLOCK
NOLOCK
Bu durumda, diğer soruları nasıl engelleyebileceğini merak ettim ve merak ettim DELETE
. Kullanarak kilitlere hızlıca baktım sp_lock
ve işte gördüğüm şey:
DB S GRANT
TAB IS GRANT
PAG S GRANT
Şimdi, benim anlayışım bunun NOLOCK
sadece bir Şema-Stabilite kilidi alması gerektiği, neden bir IS kilidi kapmasıydı?
Merakım kesildi. BOL'a baktım ve onu kullanmanın iki yolu olduğunu gördüm WITH (NOLOCK)
ve kullanımdan kaldırıldı (NOLOCK)
, bu yüzden denemeye karar verdim. Aşağıdaki sorguları çalıştırarak izledim sp_lock
:
SELECT SomeField FROM SomeTable WITH (NOLOCK)
DB S HİBE TAB Sch-S HİBE
SELECT SomeField FROM SomeTable (NOLOCK)
DB S HİBE TAB Sch-S HİBE
Tabii ki, Şema-Stabilite kilitlerim var. Öyleyse benim sorum şu: burada neler oluyor? NOLOCK kullanmak için kabul edilen sözdizimi ya WITH (NOLOCK)
da ya da (NOLOCK)
öyleyse, sorgu neden yalnızca düz NOLOCK
parantez (parantez olmadan) kullanıldığında hata vermiyor ? Destekleniyorsa, neden bir IS kilidi alıyor? Burada neyi özlüyorum? Ben bir cevap için çevrimiçi arama yapıyorum, ancak şimdiye kadar kısa geldi.
Bunu hem 2008R2 hem de 2012'de test ettim.
SELECT SomeField FROM SomeTable NOLOCK (NOLOCK)
çift burun etkisi için;)