Sql server 标量函数fn\u cdc\u get\u min\u lsn()持续返回有效表名的“0x00000000000000”?
我已在MS SQL 2008数据库上激活了Change Data Capture CDC,并使用以下代码向数据捕获添加新选项卡:Sql server 标量函数fn\u cdc\u get\u min\u lsn()持续返回有效表名的“0x00000000000000”?,sql-server,sql-server-2008,cdc,Sql Server,Sql Server 2008,Cdc,我已在MS SQL 2008数据库上激活了Change Data Capture CDC,并使用以下代码向数据捕获添加新选项卡: EXEC sys.sp_cdc_enable_table @source_schema ='ordering', @source_name ='Fields', @role_name = NULL, @supports_net_changes = 0; 但是,每当我尝试使用sys.fn\u cdc\u get\u min从跟踪表中选择更改时_lsn@TableNam
EXEC sys.sp_cdc_enable_table
@source_schema ='ordering',
@source_name ='Fields',
@role_name = NULL,
@supports_net_changes = 0;
但是,每当我尝试使用sys.fn\u cdc\u get\u min从跟踪表中选择更改时_lsn@TableName作用
SET @Begin_LSN = sys.fn_cdc_get_min_lsn('Fields')
我总是得到零值
我尝试使用以下拼写添加架构名称:
SET @Begin_LSN = sys.fn_cdc_get_min_lsn('ordering.Fields')
但是这没有帮助。我的假设是sys.fn\u cdc\u get\u min\u lsn接受表名。我多半被MSDN文档中的示例误导了,可能是因为我没有检查参数的确切含义 原来sys.fn_cdc_get_min_lsn接受的是捕获实例名,而不是表名 粗略浏览一下我当前的捕获实例:
SELECT capture_instance FROM cdc.change_tables
返回正确的参数名称:
ordering_Fields
因此,应该使用下划线作为模式分隔符,而不是SQL Server中常见的点符号。以上答案是正确的。或者,您可以向cdc enable添加一个额外的参数capture_实例
EXEC sys.sp_cdc_enable_table
@source_schema ='ordering',
@source_name ='Fields',
@capture_instance = 'dbo_Fields'
@role_name = NULL,
@supports_net_changes = 0;
然后在min_lsn函数中使用capture_实例字符串
SET @Begin_LSN = sys.fn_cdc_get_min_lsn('dbo_Fields')
将返回第一个LSN,而不是0x00000000000000
这在试图解决错误时特别有用
为过程或函数cdc提供的参数数量不足。。。调用时从SQL
cdc_get_net_changes_Fields(@Begin_LSN, sys.fn_cdc_get_max_lsn(), 'all')
这仅仅意味着LSN超出了预期范围我知道这在这篇文章中已经解释过了,但我想我会把我晚上的旅程安排在CDC上 此错误: 为过程或函数cdc提供的参数数量不足 可能是因为您的低LSN为0x00 这可能是因为您在fn\u cdc\u get\u min\u lsn中输入了错误的实例名称 使用从cdc.change\u表中选择*来查找它 最后,确保使用binary10存储LSN。如果您只使用varbinary或binary,您将再次得到0x00。这显然是对我的回报,我嘲笑所有使用varchar的noob,并想知道为什么它们的字符串被截断为一个字符 示例脚本:
declare @S binary(10)
declare @E binary(10)
SET @S = sys.fn_cdc_get_min_lsn('dbo_YourTable')
SET @E = sys.fn_cdc_get_max_lsn()
SELECT @S, @E
SELECT *
FROM [cdc].[fn_cdc_get_net_changes_dbo_issuedToken2]
(
@S,@E,'all'
)
…虽然正如@kevin指出的,仅仅替换点并不总是有效,我相信你是正确的,但即使我从cdc复制粘贴实例名称。将_表直接更改为fn_cdc_get_min_lsn,我也会得到可怕的0x002021年4月,这对我很有帮助。。感谢@alexander galkin,我不知何故也错误地解释了参数值。