0
我需要檢索多個表的更改數據捕獲行,並且我需要(通過IT公司的政策)通過存儲過程訪問數據庫。我寧願使用表名作爲參數來創建一個單一的存儲過程,而不是我監視的每個表的一個存儲過程。我掛斷電話的地方是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
你需要使用動態SQL表名稱添加到您的SQL執行前 – Beth