Nieudokumentowana funkcja, nazywa się %%lockres%% i jest związana z implementacją blokowania SQL Server. Silnik bazy danych implementuje hierarchię blokowania i żąda blokad na poziomie tabeli, na poziomie strony i na poziomie rekordu.
Gdy wymagana jest blokada na poziomie rekordu, SQL Server nie umieszcza blokady na samym rekordzie — SQL Server po prostu generuje wartość skrótu (hash), a wynikowa wartość jest ostatecznie zablokowana. Aby obliczyć tę wartość skrótu, SQL Server używa nieudokumentowanej funkcji %% lockres%% .
Funkcję tę można również wywołać na poziomie instrukcji SELECT.
Po wywołaniu %%lockres%% w tabeli ze zdefiniowanym indeksem klastrowanym, funkcja ta zwraca wartość skrótu kolumny klucza klastrowanego.
SELECT %%lockres%%, * FROM dbo.Foo
Wartość zwracana przez funkcję jest bez znaczenia, ponieważ jest to tylko wartość skrótu. Jednak poznanie tej wartości jest bardzo przydatne, ponieważ w DMV sys.dm_tran_locks znajdziemy również tę wartość skrótu w kolumnie resource_description . Stąd można wyświetlić rekord, na którym zażądano konkretnej blokady.
select * from sys.dm_tran_locks
Ponieważ nie zawsze mamy do czynienia z tabelą klastrowaną i chcemy dowiedzieć się o blokadach w stercie (Heap) gdzie nie nie ma wartości klucza, na podstawie której można wygenerować wartość skrótu, silnik blokuje blokuje wartość RID – tzw. Row Identifier Value .
Ta wartość ma długość 8 bajtów i ma następujący format:
FileID:PageID:Slot .
W momencie wywołania funkcji %%lockres%% na stercie, SQL Server zwróci wartość RID.
SELECT %%lockres%%, * FROM dbo.Foo_Heap
Posiadając te informacje łatwo jest określić, na którym pliku, stronie i slocie dany rekord jest przechowywany w tabeli sterty