导入任务/标识列引发错误

时间:2015-01-19 18:27:42

标签: sql sql-server visual-studio-2010 ssis sql-server-2008-r2

软件: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?

1 个答案:

答案 0 :(得分:0)

只需删除NOT NULLsmallint标识中的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),
)