sp_db_vardecimal_storage_format (Transact-SQL)

データベースの vardecimal ストレージ形式の現在の状態を返します。または、データベースで vardecimal ストレージ形式を有効にします。 SQL Server 2012 では、ユーザー データベースは常に有効になります。 SQL Server 2005 Service Pack 2 以降が必要です。

注意

データベースで vardecimal ストレージ形式を有効にする必要があるのは、SQL Server 2005 の場合のみです。

重要な注意事項重要

データベースの 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 以降のバージョンには影響しません。

リターン コードの値

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

結果セット

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

@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 AdventureWorks2012 ;
GO
SELECT name, object_id, type_desc
FROM sys.objects 
 WHERE OBJECTPROPERTY(object_id, 
   N'TableHasVarDecimalStorageFormat') = 1 ;
GO

使用例

次のコードでは、AdventureWorks2012 データベースで圧縮を有効にして状態を確認した後、Sales.SalesOrderDetail テーブルの decimal 列と numeric 列を圧縮します。

USE master ;
GO

EXEC sp_db_vardecimal_storage_format 'AdventureWorks2012', 'ON' ;
GO

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

USE AdventureWorks2012 ;
GO

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

関連項目

参照

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