2013-03-20 10 views
5

Sto cercando di ottenere le modifiche nette sulla tabella abilitata CDC passando le date Min e Max. Ma sta lanciando sotto l'errore.Errori di acquisizione dati di modifica

Msg 313, Level 16, State 3, Line 24 
An insufficient number of arguments were supplied for the procedure or function cdc.fn_cdc_get_net_changes_ ... . 

Il mio codice è il seguente:

DECLARE @CDate DATE = '2013-03-18' --This is the date after the CDC was enabled on the table 
DECLARE @count INT; 
DECLARE @lsnStartDatetime DATETIME; 
DECLARE @lsnEndDateTime DATETIME; 

DECLARE @begin_time DATETIME , 
@end_time DATETIME , 
@from_lsn BINARY(10) , 
@to_lsn BINARY(10); 


SELECT @lsnStartDatetime = CAST(CAST(@CDate AS NVARCHAR(10)) + ' 00:00:00' AS DATETIME) 
SELECT @lsnEndDateTime = CAST(CAST(@CDate AS NVARCHAR(10)) + ' 23:59:59' AS DATETIME) 


SET @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', 
             @lsnStartDatetime); 
SET @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', 
            @lsnEndDateTime); 

if exists (select * from sys.objects where name = 'EmployeeCDCbyDate' and type = 'u') 
drop table etl.EmployeeCDCbyDate 
SELECT * 
FROM cdc.fn_cdc_get_net_changes_employee(@from_lsn, @to_lsn, N'all') 

E 'il from_lsn e to_lsn ottenendo da partita pretende molto sys.fn_cdc_map_time_to_lsn con è mappato aginst tabella cdc 'dipendente'

Sotto opere di codice bene; ma ottiene tutte le modifiche nette da min max lsn's.

DECLARE @min_lsn BINARY(10) = sys.fn_cdc_get_min_lsn ('employee') 
DECLARE @max_lsn BINARY(10) = sys.fn_cdc_get_max_lsn() 
SELECT * FROM cdc.fn_cdc_get_net_changes_employee(@min_lsn, @max_lsn, 'all') ORDER BY 1 desc 

cosa ho bisogno è di ottenere min e max lsn di esempio CDC per certa data e ottenere le variazioni nette per quella data. Qualche indizio?

Edit:

Questo funziona bene con il primo tavolo quando permetto sul mazzo di tabelle.

Es:

USE ERP 

EXEC sys.sp_cdc_disable_db 
EXEC sys.sp_cdc_enable_db 

EXEC sys.sp_cdc_enable_table @source_schema = N'dbo', 
@source_name = N'Employee', 
@capture_instance = 'Employee', 
@supports_net_changes =1, 
@role_name = NULL 

EXEC sys.sp_cdc_enable_table @source_schema = N'dbo', 
@source_name = N'StoreListing', 
@capture_instance = 'StoreListing', 
@supports_net_changes =1, 
@role_name = NULL 

Go 

Questo funziona bene con la tabella Employee. Se cambio l'ordine in cui sono abilitati al CDC (se metto prima l'elenco degli archivi e il dipendente successivo), allora funziona bene con l'elenco dei dipendenti.

risposta

1

C'è una risposta a una domanda simile su MSDN Social: Is there bug with cdc.fn_cdc_get_net_changes_.... in SQL Server 2012.

È contrassegnato come risposta da un moderatore. Ecco la citazione:

Ho provato nel mio server. Quando eseguivo lo script in SQL Server 2008 R2, poteva essere eseguito correttamente senza errori.

Quando ho eseguito lo script in SQL Server 2012, il messaggio di errore è risultato uguale al tuo. Penso che potresti provare ad applicare l'ultimo Service Pack di SQL Server 2012 per vedere se andrebbe bene.

And here is a bug report with Microsoft. È sotto inchiesta.

+0

Coloro tutto su MSDN forum e su Connect sono stati i miei post però :-) . Sto cercando se qualcuno ha trovato un modo alternativo per farlo. – Sreedhar

+0

Ci scusiamo per questo. Avrei dovuto confrontare il codice. Quel codice in Modifica, che funziona per la prima tabella, funziona per altre tabelle? – Stoleg