次の方法で共有


sp_db_vardecimal_storage_format (Transact-SQL)

適用対象: SQL Server

データベースの現在の vardecimal ストレージ形式の状態を返すか、またはストレージ形式 vardecimal データベースを有効にします。 SQL Server 2008 (10.0.x) 以降のバージョンでは、ユーザー データベースは常に有効になります。 ただし、 レベルの圧縮 は同じ目標を達成するため、 vardecimal ストレージ形式は非推奨になります。 vardecimal ストレージ形式のデータベースを有効にする必要があるのは、SQL Server 2005 (9.x) のみです。

重要

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

構文

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

引数

[ @dbname = ] N'dbname'

ストレージ形式を変更するデータベースの名前。 @dbnamesysname で、既定値は NULL です。 データベース名を省略すると、SQL Server インスタンス内のすべてのデータベースの vardecimal ストレージ形式の状態が返されます。

[ @vardecimal_storage_format = ] 'vardecimal_storage_format'

vardecimal ストレージ形式を有効にするかどうかを指定します。 @vardecimal_storage_formatvarchar(3) で、既定値は NULL です。 @vardecimal_storage_format は、 ON または OFFできます。 データベース名を指定しても @vardecimal_storage_format を省略すると、指定したデータベースの現在の設定が返されます。

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

リターン コードの値

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

結果セット

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

@vardecimal_storage_format引数が指定されていない場合、sp_db_vardecimal_storage_formatDatabase Name列とVardecimal Stateを返します。

解説

sp_db_vardecimal_storage_formatvardecimal 状態を返しますが、 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