2013-04-30 29 views
6

我有我的MS SQL 2008数据库启用变更数据捕获(CDC),并使用下面的代码到一个新的TABEL添加到数据采集:标量函数fn_cdc_get_min_lsn()为有效的表名不断返回'0x00000000000000000000'?

EXEC sys.sp_cdc_enable_table 
@source_schema ='ordering', 
@source_name ='Fields', 
@role_name = NULL, 
@supports_net_changes = 0; 

但是,每当我尝试选择从变化跟踪表使用sys.fn_cdc_get_min_lsn(@TableName)函数

SET @Begin_LSN = sys.fn_cdc_get_min_lsn('Fields') 

我总是得到零值。

我试着用以下的拼写添加架构名称:

SET @Begin_LSN = sys.fn_cdc_get_min_lsn('ordering.Fields') 

但这并没有帮助。

回答

14

我mystake假设sys.fn_cdc_get_min_lsn()接受表名称。我大多被MSDN文档中的例子误导了,可能并没有检查参数的确切含义。

事实证明,sys.fn_cdc_get_min_lsn()接受捕获实例名称,而不是表名!

在我当前的捕获情况下粗略地看一眼:

SELECT capture_instance FROM cdc.change_tables 

返回正确的参数名:

ordering_Fields 

所以,应该下划线使用作为架构分隔,而不是点符号因为它在SQL Server中很常见。

+0

...虽然@kevin指出,只是更换点并不总是会工作 – piers7 2015-03-26 03:07:43

1

以上答案正确。另外,您可以添加额外的参数capture_instance疾病预防控制中心启用

EXEC sys.sp_cdc_enable_table 
@source_schema ='ordering', 
@source_name ='Fields', 
@capture_instance = 'Fields' 
@role_name = NULL, 
@supports_net_changes = 0; 

然后使用capture_instance字符串中的min_lsn功能

SET @Begin_LSN = sys.fn_cdc_get_min_lsn('Fields') 

将返回第一个LSN,而不是0x00000000000000000000。

这试图解决 错误时是有用partiularly“的参数的数目不足的过程或函数CDC提供的......”从SQL调用

cdc_get_net_changes_Fields(@Begin_LSN, sys.fn_cdc_get_max_lsn(), 'all') 

这仅仅意味着当“LSN超出预期的范围”