sp_db_vardecimal_storage_format (Transact-SQL)

Возвращает текущее состояние формата хранения vardecimal для базы данных либо включает этот формат в базе данных. В SQL Server 2008 пользовательские базы данных всегда включены. Требуется SQL Server 2005 с пакетом обновления 2 или более поздняя версия. Формат хранения vardecimal доступен только в следующих выпусках SQL Server: Enterprise, Developer и Evaluation.

ПримечаниеПримечание

Включение формата хранения vardecimal для баз данных необходимо только в SQL Server 2005.

Важное примечаниеВажно!

Изменение состояния формата хранения vardecimal для базы данных может повлиять на резервное копирование и восстановление, зеркальное отображение базы данных, sp_attach_db, доставку журналов и репликацию. Дополнительные сведения о формате хранения vardecimal см. в разделе Хранение десятичных данных в виде значений переменной длины.

Синтаксис

sp_db_vardecimal_storage_format [ [ @dbname = ] 'database_name'] 
    [ , [ @vardecimal_storage_format = ] { 'ON' | 'OFF' } ] 
[;]

Аргументы

  • [ @dbname = ] 'database_name'
    Имя базы данных, формат хранения которой нужно изменить. Аргумент database_name имеет тип sysname и не имеет значения по умолчанию. Если имя базы данных пропущено, то возвращаются состояния формата хранения vardecimal для всех баз данных в экземпляре SQL Server.

  • [ @vardecimal_storage_format = ] {'ON'|'OFF'}
    Указывает, включен ли формат хранения vardecimal. Аргумент @vardecimal_storage_format может иметь состояния ON или OFF. Аргумент имеет тип varchar(3) и не имеет значения по умолчанию. Если имя базы данных указано, но аргумент @vardecimal_storage_format пропущен, то возвращается текущий параметр указанной базы данных. Этот аргумент не действует в SQL Server 2008 или более поздних версиях.

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

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

Результирующие наборы

Если формат хранения базы данных изменить нельзя, то хранимая процедура sp_db_vardecimal_storage_format возвращает ошибку. Если база данных уже находится в указанном состоянии, то хранимая процедура не вносит никаких изменений.

Если аргумент @vardecimal_storage_format не предоставлен, возвращаются столбцы Database Name и Vardecimal State.

Замечания

Процедура sp_db_vardecimal_storage_format возвращает состояние vardecimal, но не может изменить его.

Хранимая процедура sp_db_vardecimal_storage_format завершается неуспешно в следующих случаях:

  • Отсутствуют активные пользователи базы данных.

  • Включено зеркальное отображение базы данных.

  • Выпуск SQL Server не поддерживает формат хранения vardecimal.

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

Переключение в состояние OFF не будет выполнено, если в таблицах используется сжатие баз данных vardecimal. Формат хранения базы данных изменяется с помощью хранимой процедуры sp_tableoption. Определить, в каких таблицах базы данных используется формат хранения vardecimal, можно с помощью функции OBJECTPROPERTY и поиском свойства TableHasVarDecimalStorageFormat, как показано в приведенном ниже примере.

USE AdventureWorks2008R2 ;
GO
SELECT name, object_id, type_desc
FROM sys.objects 
 WHERE OBJECTPROPERTY(object_id, 
   N'TableHasVarDecimalStorageFormat') = 1 ;
GO

Примеры

В следующем коде включается сжатие в базе данных AdventureWorks2008R2, подтверждается состояние, а затем сжимаются десятичные и числовые столбцы в таблице Sales.SalesOrderDetail.

USE master ;
GO

EXEC sp_db_vardecimal_storage_format 'AdventureWorks2008R2', 'ON' ;
GO

-- Check the vardecimal storage format state for
-- all databases in the instance.
EXEC sp_db_vardecimal_storage_format ;
GO

USE AdventureWorks2008R2 ;
GO

EXEC sp_tableoption 'Sales.SalesOrderDetail', 'vardecimal storage format', 1 ;
GO