Просто, чтобы это могло помочь кому-то другому. (Я понимаю, что этот OP упоминает MSSQL 2005)
В SQL 2008 и выше для этого можно использовать виртуальный столбец %%physloc%%
. Это недокументировано и не поддерживается. Однако во многих случаях это оказалось полезным.
Шестнадцатеричные значения в %%physloc%%
указывают не только номер файла и номер страницы; они также указывают номер слота на странице. Однако кодировка не очень удобочитаема для человека.
Следующие функции могут использоваться для определения значений в этом виртуальном столбце.
1. Функция sys.fn_PhysLocFormatter
Эта функция превращает шестнадцатеричное значение, возвращаемое %%physloc%%
, в приятный для восприятия человеком формат. Вы можете использовать это так:
SELECT *,sys.fn_PhysLocFormatter(%%physloc%%) AS PLF
FROM dbo.tst AS T
ORDER BY PLF;
Выход этой функции имеет формат (FileNumber:PageNumber:SlotNumer)
. Ниже приведен результат вышеприведенного запроса:
2. Функция sys.fn_PhysLocCracker
Это табличная функция, вы должны использовать оператор CROSS APPLY, чтобы вызвать ее в запросе:
SELECT * FROM dbo.tst AS T
CROSS APPLY sys.fn_PhysLocCracker(%%physloc%%) AS FPLC
ORDER BY FPLC.file_id, FPLC.page_id, FPLC.slot_id;
Возвращает три столбца: file_id
, page_id
и slot_id
. При использовании с той же таблицей, которую вы видели в предыдущем примере, выходные данные выглядят так:
<ч />
Ссылки:
Где мои ряды? - Использование виртуального столбца %% physloc %%
SQL Server - Найти физическое местоположение записей
SQL Server 2008: Новая (недокументированная) физическая функция локатора строк