Часть страницы, зарезервированная для данных, имеет переменную длину, которая зависит от количества и размера строк, хранящихся на этой странице. Для каждой строки, хранимой на странице, есть запись в зарезервированном для данных пространстве и запись в таблице смещения строк в конце страницы. (Данные строки не могут размещаться на двух и более страницах за исключением значений данных varchar (max) и varbinary (max), которые хранятся в собственных специфических страницах.)
Каждая новая строка сохраняется после уже сохраненных строк, пока страница не будет заполнена. Если на странице нет достаточного места для размещения новой строки той же таблицы, строка сохраняется на следующей странице в цепочке страниц.
Для всех таблиц, которые имеют только столбцы фиксированной длины, одно и то же количество строк хранится на каждой странице. Если же таблица имеет хотя бы один столбец переменной длины (например, столбец varchar), то количество строк на страницах может отличаться, и система помещает на страницу столько строк, сколько эта страница может вместить.
Таблица смещений строк
Последняя часть страницы тесно связана с зарезервированным для данных пространством, потому что каждая строка, хранящаяся на странице, имеет соответствующую запись в таблице смещений строк (рис. 15.1). Таблица
смещений строк содержит двухбайтовые записи, состоящие из номера строки и байта смещения адреса этой строки на странице. (Записи таблицы смещения строк имеют инвертированный порядок относительно порядка самих строк на странице.) Предположим, что каждая строка таблицы имеет фиксированную длину 36 байтов. Первая строка таблицы будет сохранена на странице со смещением 96 байтов (сразу после заголовка страницы). Соответствующая запись в таблице смещения строк будет записана в последних двух байтах страницы, указывая номер строки (в первом байте) и смещение строки (во втором байте). Следующая строка будет сохраняться последовательно в следующих 36 байтах этой страницы. Соответствующая запись в таблице смещения строк будет располагаться в третьем и четвертом байтах от конца страницы, указывая опять номер строки (1) и смещение строки (132).