sp_db_vardecimal_storage_format (Transact-SQL)
適用対象: SQL サーバー
データベースの現在の 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'
ストレージ形式を変更するデータベースの名前。 @dbname は sysname で、既定値は NULL
です。 データベース名を省略すると、SQL Server インスタンス内のすべてのデータベースの vardecimal ストレージ形式の状態が返されます。
[ @vardecimal_storage_format = ] 'vardecimal_storage_format'
vardecimal ストレージ形式を有効にするかどうかを指定します。 @vardecimal_storage_format は varchar(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_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