Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 标量函数fn\u cdc\u get\u min\u lsn()持续返回有效表名的“0x00000000000000”?_Sql Server_Sql Server 2008_Cdc - Fatal编程技术网

Sql server 标量函数fn\u cdc\u get\u min\u lsn()持续返回有效表名的“0x00000000000000”?

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

我已在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@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,我不知何故也错误地解释了参数值。