sp_db_vardecimal_storage_format (Transact-SQL)

适用于SQL Server

返回数据库的当前 vardecimal 存储格式状态,或者为 vardecimal 存储格式启用数据库。 在 SQL Server 2008(10.0.x)及更高版本中,始终启用用户数据库。 但是,由于 行级压缩 达到了相同的目标, 因此弃用 vardecimal 存储格式。 仅在 SQL Server 2005(9.x)中才需要为 vardecimal 存储格式启用数据库。

重要

更改 数据库的 vardecimal 存储格式状态可能会影响备份和恢复、数据库镜像、 sp_attach_db日志传送和复制。

语法

sp_db_vardecimal_storage_format
    [ [ @dbname = ] N'dbname' ]
    [ , [ @vardecimal_storage_format = ] 'vardecimal_storage_format' ]
[ ; ]

参数

[ @dbname = ] N'dbname'

要更改存储格式的数据库的名称。 @dbname为 sysname,默认值为 NULL. 如果省略数据库名称, 则会返回 SQL Server 实例中所有数据库的 vardecimal 存储格式状态。

[ @vardecimal_storage_format = ] 'vardecimal_storage_format'

指定是否 启用 vardecimal 存储格式。 @vardecimal_storage_format为 varchar(3),默认值为 NULL. @vardecimal_storage_format 可以是 ONOFF。 如果提供了数据库名称,省略了@vardecimal_storage_format,则返回指定数据库的当前设置。

此参数对 SQL Server 2008(10.0.x)及更高版本没有影响。

返回代码值

0(成功)或 1(失败)。

结果集

如果无法更改数据库存储格式, sp_db_vardecimal_storage_format 则返回错误。 如果数据库已处于指定的状态,则此存储过程无效。

如果未提供@vardecimal_storage_format参数,sp_db_vardecimal_storage_format则返回列Database Name和列Vardecimal State

注解

sp_db_vardecimal_storage_format 返回 vardecimal 状态,但无法更改 vardecimal 状态。

sp_db_vardecimal_storage_format 在以下情况下失败:

  • 数据库中有活动用户。
  • 已启用数据库进行镜像。
  • SQL Server 版本不支持 vardecimal 存储格式。

若要将 vardecimal 存储格式状态 OFF更改为,必须将数据库设置为简单的恢复模式。 将数据库设置为简单恢复时,日志链将中断。 将 vardecimal 存储格式状态OFF设置为 > 后执行完整数据库备份。

如果存在使用 vardecimal 数据库压缩的表,将状态OFF更改为失败。 若要更改表的存储格式,请使用 sp_tableoption。 若要确定数据库中的哪些表使用 vardecimal 存储格式,请使用 OBJECTPROPERTY 函数并搜索 TableHasVarDecimalStorageFormat 属性,如以下示例所示。

USE AdventureWorks2022;
GO

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

示例

下面的代码在 AdventureWorks2022 数据库中启用压缩,确认状态,然后压缩 Sales.SalesOrderDetail 表中的 decimal 和 numeric 列。

USE master;
GO

EXEC sp_db_vardecimal_storage_format 'AdventureWorks2022', 'ON';
GO

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

USE AdventureWorks2022;
GO

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