软件:SSMS 2008 R2,Visual Studio 2010 Ultimate(用于创建对象)
这很奇怪,我希望有人能够向我解释。我有两个版本的同一个表。生产版本有两个字段,Test版本具有相同的两个字段PLUS RecordID字段(标识字段)。
这是测试中的表定义:
CREATE TABLE [dbo].[Table]
(
[Field1] varchar(50) NOT NULL,
[Field2] varchar(50) NOT NULL,
[RecordId] smallint identity not null,
constraint [CIDX_Table] unique clustered ([RecordId]) with (data_compression=page),
)
此处出现错误的地方......我尝试使用生产数据(Field1& field2)刷新测试版本。由于生产版本没有标识列,因此我不会映射它。标识列应自动递增。我的研究表明,如果你没有明确说明种子和增量,则默认值为(1,1)。导入任务向导失败(即使选中了Enable Identity Insert!)。错误:
"无法在字段RecordID中插入NULL值。"
这是一个非常奇怪的部分。最初,我认为错误是种子和增量丢失了,所以我修改了表定义如下:
CREATE TABLE [dbo].[Table]
(
[Field1] varchar(50) NOT NULL,
[Field2] varchar(50) NOT NULL,
[RecordId] smallint identity(1,1) not null,
constraint [CIDX_Table] unique clustered ([RecordId]) with (data_compression=page),
)
然后我尝试再次刷新表,并且EXACT SAME SSIS包成功并复制了两列并自动递增RecordID字段。
我的问题:哎呀!?为什么明确说明种子/增量允许导入向导插入值并自动增加,如果默认情况下没有明确说明它们仍然是1,1?
答案 0 :(得分:0)
只需删除NOT NULL
列smallint
标识中的RecordId
即可。因为身份已经不是空的:
CREATE TABLE [dbo].[Table]
(
[Field1] varchar(50) NOT NULL,
[Field2] varchar(50) NOT NULL,
[RecordId] smallint identity(1,1),
constraint [CIDX_Table] unique clustered ([RecordId]) with (data_compression=page),
)