sys.sp_flush_CT_internal_table_on_demand (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

このストアド プロシージャを使用すると、変更追跡が有効になっているデータベース内のテーブルのサイド テーブル (change_tracking_objectid) を手動でクリーンできます。 TableToClean パラメーターが渡されない場合、このプロセスでは、変更の追跡が有効になっているデータベース内のすべてのテーブルのすべてのサイド テーブルがクリーンされます。

Transact-SQL 構文表記規則

構文

sys.sp_flush_CT_internal_table_on_demand
    [ @TableToClean = ] 'TableToClean'
    [ , [ @DeletedRowCount = ] DeletedRowCount OUTPUT ]
[ ; ]

引数

[ @TableToClean = ] 'TableToClean'

変更追跡が有効なテーブルを手動でクリーン。 バックログは、変更追跡によって自動クリーンアップに残されます。 すべてのサイド テーブルをクリーンするには null を指定できます。

[ @DeletedRowCount = ] 'DeletedRowCount' OUTPUT

@DeletedRowCountは bigint 型の OUTPUT パラメーターです。 このパラメーターは、プロセス中にクリーンされた行の合計数を返します。

リターン コードの値

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

DECLARE @DeletedRowCount BIGINT;

EXEC sys.sp_flush_CT_internal_table_on_demand '[Sales].[Orders]',
    @DeletedRowCount = @DeletedRowCount OUTPUT;

PRINT CONCAT('Number of rows deleted: ', @DeletedRowCount);
GO

結果セットは次のようになります。

Started executing query at Line 1
Cleanup Watermark = 17
Internal Change Tracking table name : change_tracking_1541580530
Total rows deleted: 0.
Number of rows deleted: 0
Total execution time: 00:00:02.949

解説

この手順は、変更の追跡が有効になっているデータベースで実行する必要があります。

ストアド プロシージャを実行すると、次のいずれかのシナリオが発生します。

  • テーブルが存在しない場合、または変更の追跡が有効になっていない場合は、適切なエラー メッセージがスローされます。

  • このストアド プロシージャは、動的管理ビューを使用して、無効なクリーンアップ バージョンに基づく変更追跡サイド テーブルからコンテンツをクリーンする別の内部ストアド プロシージャをsys.change_tracking_tables呼び出します。 実行中は、(5000 行ごとに) 削除された合計行の情報が表示されます。

このストアド プロシージャは、次の製品で使用できます。

  • SQL Server 2016 (13.x) Service Pack 1 以降のバージョン
  • Azure SQL Database と Azure SQL Managed Instance

アクセス許可

このプロシージャを実行できるのは、 sysadmin サーバー ロールまたは データベース ロールdb_owner メンバーだけです。