在我的 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]
当我更新地址字段(nvarchar,不是 null)时,它被捕获如下
NULL 3 2 mahmood True here 111 2014-09-01 14:42:28.913
NULL 4 2 mahmood True there 111 2014-09-01 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 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
考虑到 sql server 更新是一个链式删除和插入,第一行是删除行捕获,第二行是插入行捕获。
但我不明白为什么当我更新其他字段时地址被跟踪为 NULL,我将不胜感激有关此问题的任何信息。
这是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
or64 KB
。要增加此大小以支持更大的 LOB 数据,请使用配置max text repl size
服务器配置选项来指定更大的最大大小。有关详细信息,请参阅配置max text repl size
服务器配置选项。您正在使用一个
nvarchar(max)
. 我有同样的问题。我通过更改我varchar(max)
的 with来修复它varchar(255)
。对于一个地址255
应该足够了。希望这有帮助