首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改数据捕获错误

更改数据捕获错误
EN

Stack Overflow用户
提问于 2013-03-20 01:42:29
回答 2查看 2.3K关注 0票数 5

我试图通过传递Min和Max日期来获得CDC启用的表上的净更改。但却被抛在错误之下。

代码语言:javascript
复制
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_ ... .

我的代码如下:

代码语言:javascript
复制
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')

是不是from_lsn和to_lsn从sys.fn_cdc_map_time_to_lsn得到的与cdc表“employee”之前的映射不匹配?

下面的代码工作得很好,但是它得到了最小最大lsn的所有净更改。

代码语言:javascript
复制
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

我需要的是得到最小和最大lsn的cdc实例的给定日期,并得到该日期的净变化。有什么线索吗?

编辑:

当我在一堆表上启用时,第一个表可以很好地工作。

例如:

代码语言:javascript
复制
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

这在雇员表中很好。如果我改变了它们启用CDC的顺序(如果我首先使用storelist,接下来是employee ),那么它可以很好地处理员工列表。

EN

回答 2

Stack Overflow用户

发布于 2013-05-26 22:19:17

在MSDN上有一个类似问题的答案:……在Server 2012中

它被标记为由版主回答。以下是引文:

我在我的服务器上测试过。当我在Server 2008 R2中运行该脚本时,它可以顺利运行,不会出错。 当我在Server 2012中运行脚本时,错误消息的结果与您的相同。我认为您可以尝试应用最新的SQLServer2012 Service,看看它是否正常。

这是微软的一份bug报告。正在调查中。

票数 1
EN

Stack Overflow用户

发布于 2015-06-18 16:04:24

我收到这条消息,原因是我有我的开始LSN和结束LSN号码。

我更详细地回答了https://stackoverflow.com/a/30920333/98802

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15513808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档