Mah*_*ari 2 sql-server-2012 change-data-capture
在我的 Sql Server 2012 中,我在数据库中有下表
CREATE TABLE [dbo].[HumanResource](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[IsHired] [bit] NULL,
[Address] [nvarchar](max) NULL,
[Score] [bigint] NULL,
[LastUpdate] [datetime] NULL,
CONSTRAINT [PK_HumanResource] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
当我更新地址字段(nvarchar,not null)时,它被捕获如下
NULL 3 2 MAHMOOD真 这里 111 2014年9月1日14:42:28.913
NULL 4 2 MAHMOOD真 有 111 2014年9月1日14:42:28.913
但是当我更新 Score 字段 (nvarchar, null ) 时,它会被捕获
NULL 3 2 Mahmood True NULL 111 2014-09-01 14:42:28.913
NULL 4 2 Mahmood True there 111 2014-09-01 14:42:28.913
**编辑(更新和选择查询):
update HumanResource set Address = 'blah blah blah' where id = 2
update HumanResource set Score = Score + 1 where id = 2
SELECT TOP (10000) __$start_lsn, __$end_lsn, __$seqval, __$operation,
__$update_mask, ID, Name, IsHired, Address, Score, LastUpdate
FROM cdc.dbo_HumanResource_CT
Run Code Online (Sandbox Code Playgroud)
考虑到 sql server Update 是一个链式的Delete 和 Insert,第一行是删除行捕获,第二行是插入行捕获。
但是我不明白为什么当我更新其他字段时地址被跟踪为 NULL,我很感激有关此问题的任何信息。
小智 6
这是MSDN
数据的大对象数据类型的列类型image
,text
以及ntext
总是被分配一个NULL
值时__$operation = 1
或__$operation = 3
。数据类型varbinary(max)
、varchar(max)
、 或的列nvarchar(max)
被分配一个NULL
值,__$operation = 3
除非该列在更新期间发生更改。当 时__$operation = 1
,这些列在删除时被赋值。包含在捕获实例中的计算列的值始终为NULL
。
默认情况下,可以添加到拍摄的列在一个单一的最大尺寸INSERT
,UPDATE
,WRITETEXT
,或UPDATETEXT
语句65,536 bytes
或64 KB
。要增加此大小以支持更大的 LOB 数据,请使用配置max text repl size
服务器配置选项指定更大的最大大小。有关详细信息,请参阅配置max text repl size
服务器配置选项。
您正在使用一个nvarchar(max)
. 我有同样的问题。我通过更改我的varchar(max)
with 来修复它varchar(255)
。对于一个地址255
应该足够了。
希望这有帮助