Мне нужно получить строки захвата измененных данных для нескольких таблиц, и мне требуется (в соответствии с ИТ-политикой компании) доступ к базе данных через хранимые процедуры. Я бы предпочел создать одну хранимую процедуру с именем таблицы в качестве параметра, а не одну хранимую процедуру для каждой таблицы, которую я отслеживаю. Что меня задевает, так это то, что 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