いくつかのテーブルの変更データ キャプチャ行を取得する必要があり、(会社の IT ポリシーにより) ストアド プロシージャを介してデータベースにアクセスする必要があります。監視しているテーブルごとに 1 つのストアド プロシージャを作成するのではなく、テーブル名をパラメーターとして使用して 1 つのストアド プロシージャを作成したいと考えています。私がつまずいたのは、CDC が監視対象のテーブルごとに個別のテーブル値関数名を定義していることです。それを一般化する最善の方法がわかりません。
cdc.fn_cdc_get_net_changes_dbo_ + @Table
の代わりに呼び出すように、次のサンプル コードを変更することは可能cdc.fn_cdc_get_net_changes_dbo_TABLE
ですか?
私が使用すべき別のアプローチはありますか?
create proc [dbo].GetChangesForTable
@Table varchar(50),
@BeginTime datetime,
@EndTime datetime
as
begin
DECLARE @begin_lsn binary(10), @end_lsn binary(10);
DECLARE @func nvarchar(128)
if @EndTime is null select @EndTime=GETDATE()
SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @BeginTime);
SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @EndTime);
-- HOW TO GET THE CORRECT FUNCTION CALLED HERE?
SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_TABLE(@begin_lsn, @end_lsn, 'all')
end
GO