sys.fn_cdc_is_bit_set

指示捕获的列是否已更新,采用的方法是检查是否在提供的位掩码内设置了其序号位置。

主题链接图标Transact-SQL 语法约定

语法

sys.fn_cdc_is_bit_set ( position , update_mask )

参数

  • position
    是掩码中要检查的序号位置。position 为 int 型。

  • update_mask
    是标识已更新列的掩码。update_mask 为 varbinary(128) 型。

返回类型

bit

注释

此函数通常用在变更数据查询中,指示列是否已更改。在下面的应用场景中,在查询前先使用函数 sys.fn_cdc_get_column_ordinal 来获取所需的列序号。然后,将 sys.fn_cdc_is_bit_set 应用到所返回的更改数据的每一行,并提供特定于列的信息作为返回的结果集的一部分。

在确定所返回结果集的所有行的列是否都已更改时,我们推荐使用此函数,而不要使用 sys.fn_cdc_has_column_changed 函数。

权限

要求用户具有 public 角色成员身份。

示例

下例使用 sys.fn_cdc_is_bit_set 将“IsGroupNmUpdated”列置于查询函数 cdc.fn_cdc_get_all_changes_HR_Department 生成的结果集之前,调用此函数时使用预先计算好的列序号和 __$update_mask 的值作为参数。

USE AdventureWorks;
GO
DECLARE @from_lsn binary(10), @to_lsn binary(10), @GroupNm_ordinal int;
SET @from_lsn = sys.fn_cdc_get_min_lsn('HR_Department');
SET @to_lsn = sys.fn_cdc_get_max_lsn();
SET @GroupNm_ordinal = sys.fn_cdc_get_column_ordinal('HR_Department','GroupName');
SELECT sys.fn_cdc_is_bit_set(@GroupNm_ordinal,__$update_mask) as 'IsGroupNmUpdated', *
FROM cdc.fn_cdc_get_all_changes_HR_Department( @from_lsn, @to_lsn, 'all')
WHERE __$operation = 4;
GO