sp_tableoption (Transact-SQL)

Изменения: 12 декабря 2006 г.

Устанавливает значения параметров для пользовательских таблиц. sp_tableoption может использоваться для контроля внутристрокового поведения таблиц со столбцами varchar(max), nvarchar(max), varbinary(max), xml, text, ntext или image.

ms173530.note(ru-ru,SQL.90).gifВажно!
Параметра text in row в следующей версии SQL Server не будет. Для хранения данных большого объема рекомендуется использовать типы данных varchar(max), nvarchar(max) и varbinary(max).

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

sp_tableoption [ @TableNamePattern = ] 'table' 
          , [ @OptionName = ] 'option_name' 
          , [ @OptionValue = ] 'value'

Аргументы

  • [ @TableNamePattern = ] 'table'
    Уточненное или неуточненное имя пользовательской таблицы базы данных. Если предоставлено полностью уточненное имя таблицы, включая имя базы данных, в качестве последнего должно использоваться имя текущей базы данных. Параметры таблицы нельзя установить одновременно для нескольких таблиц. Аргумент table_pattern имеет тип nvarchar(776) и не имеет значения по умолчанию.
  • [ @OptionName = ] 'option_name'
    Название параметра таблицы. Аргумент option_name имеет тип varchar(35) со значением по умолчанию NULL. Аргумент option_name может принимать одно из следующих значений.

    Значение Описание

    table lock on bulk load

    Если отключено (по умолчанию), то процесс массовой загрузки в пользовательских таблицах получает блокировку строк. Если включено, то процесс массовой загрузки в пользовательских таблицах получает блокировку массовых обновлений.

    insert row lock

    Не поддерживается в SQL Server 2005.

    Стратегия блокировки SQL Server — это блокировка строк с возможным переходом к блокировке страницы или таблицы. Этот параметр не влияет на свойства блокировки SQL Server и включается только для совместимости существующих сценариев и процедур.

    text in row

    При значении OFF или 0 (отключено по умолчанию) текущее поведение не меняется и в строке отсутствует блок больших двоичных объектов (BLOB).

    Если параметр указан, и аргумент @OptionValue принимает значение ON (включено) или является целым числом от 24 по 7000, новые строки text, ntext, или image сохраняются непосредственно в строке данных. Все существующие BLOB (большие двоичные объекты: text, ntext, или данные image) будут изменены на формат text in row при обновлении значения BLOB. Дополнительные сведения см. в разделе «Примечания».

    large value types out of row

    1 = Столбцы varchar(max), nvarchar(max), varbinary(max) и xml в таблице хранятся вне строки с 16-байтовым указателем корня.

    0 = Значения varchar(max), nvarchar(max), varbinary(max) и xml хранятся непосредственно в строке данных с ограничением в 8 000 байт и до тех пор, пока значение умещается в записи. Если значение не умещается в записи, то указатель хранится в строке, а все остальное хранится вне строки в области хранения объектов LOB.

    формат хранения vardecimal

    Значения TRUE, ON или 1 означают, что для указанной таблицы включен формат хранения vardecimal. Значения FALSE, OFF или 0 означают, что для таблицы не включен формат хранения vardecimal. Формат хранения vardecimal можно включить, только если он включен для базы данных с помощью хранимой процедуры sp_db_vardecimal_storage_format. Дополнительные сведения о формате хранения vardecimal см. в разделе Хранение десятичных данных в виде значений переменной длины. Для использования этого формата требуется SQL Server 2005 с пакетом обновления 2 (SP2). Формат хранения vardecimal доступен только в выпусках Enterprise Edition, Developer Edition и Evaluation Edition программы SQL Server 2005.

  • [ @OptionValue = ] 'value'
    Определяет, является ли аргумент option_name включенным (true, on, или 1) или выключенным (false, off или 0). Аргумент value имеет тип varchar(12) и не имеет значения по умолчанию. Аргумент value безразличен к регистру.

    Для параметра text in row допустимыми значениями являются: 0, on, off или целое число в диапазоне от 24 по 7 000. Когда значение аргумента value равно on, ограничение по умолчанию равно 256 байт.

Значения кодов возврата

0 (успешное завершение) или номер ошибки (неуспешное завершение)

Замечания

Процедура sp_tableoption может использоваться только для установки значений параметра для пользовательских таблиц. Чтобы отобразить свойства таблицы, используйте OBJECTPROPERTY.

Параметр text in row в sp_tableoption может быть включен или выключен только на таблицах, содержащих текстовые столбцы. Если таблица не содержит текстового столбца, в SQL Server происходит ошибка.

Когда параметр text in row включен, аргумент @OptionValue позволяет пользователям задать максимальный размер хранения в строке для BLOB. Значение по умолчанию равно 256 байт, но значения могут располагаться в диапазоне с 24 по 7 000 байт.

Строки text, ntext или image хранятся в строке данных при наличии следующих условий.

  • text in row доступен.
  • Длина строки не превышает максимального предела, указанного в аргументе @OptionValue.
  • В строке данных достаточно места.

Если в строке данных хранятся строки BLOB, считывание и запись строк text, ntext или image может производиться так же быстро, как считывание и запись символьных и двоичных строк. SQL Server не требуется получать доступ к отдельным страницам для считывания или записи строк BLOB.

Если строка text, ntext или image превышает максимальный предел или доступное место в строке, в строке сохраняются указатели. Условия для хранения строк типа BLOB в строке остаются действительными, несмотря на следующее. Для хранения указателей в строке данных должно быть достаточно места.

Строки и указатели BLOB, хранящиеся в строке таблицы, рассматриваются так же, как строки переменной длины. SQL Server использует только число байтов, необходимое для хранения строки или указателя.

Существующие строки BLOB не преобразуются немедленно при первом включении text in row. Строки преобразуются только при обновлении. Аналогично при увеличении предела параметра text in row строки text, ntext или image, уже содержащиеся в строке данных, не будут преобразованы, чтобы соответствовать новому ограничению, до тех пор, пока они не будут обновлены.

ms173530.note(ru-ru,SQL.90).gifПримечание.
Отключение параметра text in row или уменьшение предела параметра потребует преобразования всех BLOB; поэтому процесс может занять много времени, в зависимости от того, какое число строк BLOB необходимо преобразовать. Во время процесса преобразования таблица блокируется.

Для переменной table, включая функцию, возвращающую переменную table, параметр text in row включен автоматически с inline limit, по умолчанию равным 256. Этот параметр нельзя изменить.

text in row поддерживает функции TEXTPTR, WRITETEXT, UPDATETEXT и READTEXT. Пользователи могут считывать части BLOB с помощью функции SUBSTRING(), но при этом следует помнить, что внутристроковые текстовые указатели по длине и пределам чисел отличаются от других текстовых указателей. Дополнительные сведения см. в разделе Управление данными типа ntext, text и image.

Чтобы можно было перевести таблицу из формата хранения vardecimal обратно в формат хранения decimal, база данных должна находиться в режиме восстановления SIMPLE. Изменение режима восстановления разорвет цепочку журналов, используемую для целей резервного копирования, поэтому следует создать полную резервную копию базы данных сразу после отключения формата хранения vardecimal в таблице.

Разрешения

Чтобы выполнить процедуру sp_tableoption, требуется разрешение ALTER на таблицу.

Примеры

А. Хранение XML-данных вне строки

Следующий пример указывает, что данные xml в таблице HumanResources.JobCandidate должны храниться вне строки.

USE AdventureWorks;
GO
EXEC sp_tableoption 'HumanResources.JobCandidate', 'large value types out of row', 1;

Б. Включение формата хранения vardecimal для таблицы

В следующем примере в таблицу Production.WorkOrderRouting вносятся изменения, чтобы можно было хранить данные типа decimal в формате vardecimal.

USE master;
GO
-- The database must be enabled for vardecimal storage format
-- before a table can be enabled for vardecimal storage format.
EXEC sp_db_vardecimal_storage_format 'AdventureWorks', 'ON';
GO
USE AdventureWorks;
GO
EXEC sp_tableoption 'Production.WorkOrderRouting', 
   'vardecimal storage format', 'ON';

См. также

Справочник

sys.tables (Transact-SQL)
OBJECTPROPERTY (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)
Хранимые процедуры ядра СУБД (Transact-SQL)

Другие ресурсы

Данные в строке

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Новое содержимое
  • Добавлен формат хранения vardecimal, доступный в SQL Server 2005 с пакетом обновления 2 (SP2).