sp_db_vardecimal_storage_format (Transact-SQL)

適用対象:SQL Server

データベースの現在の vardecimal ストレージ形式の状態を返すか、または vardecimal ストレージ形式のデータベースを有効にします。 SQL Server 2008 (10.0.x) 以降では、ユーザー データベースは常に有効になります。 vardecimal ストレージ形式のデータベースの有効化は、SQL Server 2005 (9.x) でのみ必要です。

Note

SQL Server 2019 (15.x) では、vardecimal ストレージ形式がサポートされています。ただし、行レベルの圧縮は同じ目標を達成するため、vardecimal ストレージ形式は非推奨です。 この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。

重要

データベースの vardecimal ストレージ形式の状態を変更すると、バックアップとリカバリ、データベース ミラーリング、sp_attach_db、ログ配布、レプリケーションに影響が生じることがあります。

構文

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

引数

[ @dbname= ] 'database_name'
ストレージ形式を変更するデータベースの名前を指定します。 database_nameは sysname で、既定値はありません。 データベース名を省略すると、SQL Server のインスタンス内のすべてのデータベースの vardecimal ストレージ形式の状態が返されます。

[ @vardecimal_storage_format= ] {'ON'|'OFF'}
vardecimal ストレージ形式を有効にするかどうかを指定します。 @vardecimal_storage_format を ON または OFF にできます。 パラメーターは varchar(3) で、既定値はありません。 データベース名を指定しても @vardecimal_storage_format 省略すると、指定したデータベースの現在の設定が返されます。

重要

この引数は、SQL Server 2008 (10.0.x) 以降のバージョンには影響しません。

リターン コードの値

0 (成功) または 1 (失敗)

結果セット

データベースのストレージ形式を変更できない場合、sp_db_vardecimal_storage_format はエラーを返します。 データベースが既に指定された状態にある場合、ストアド プロシージャは影響を受けません。

引数が @vardecimal_storage_format 指定されていない場合は、データベース名と Vardecimal 状態の列を返します。

解説

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  

参照

データベース エンジン ストアド プロシージャ (Transact-SQL)