2017-10-11 126 views
0

我试图用下面的代码构建表 - 我创建表时没有错误,我可以看到结构并且它显示IDENTITY_INSERT设置为ON插入时生成标识插入错误(不在代码中)

CREATE TABLE lt_percent_cs 
(
    id_key INT IDENTITY PRIMARY KEY, 
    customer_no INT , 
    season INT, 
    percentage DECIMAL, 

    created_by VARCHAR(15) NULL, 
    create_dt DATETIME NULL, 
    last_updated_by VARCHAR(15) NULL, 
    last_update_dt DATETIME NULL, 
    create_loc VARCHAR(16) NULL 
) ON [primary] 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].lt_percent_cs 
    ADD CONSTRAINT [lt_percent_created_by] 
     DEFAULT (user_name()) FOR [created_by] 
GO 

ALTER TABLE [dbo].lt_percent_cs 
    ADD CONSTRAINT [lt_percent_create_dt] 
     DEFAULT (getdate()) FOR [create_dt] 
GO 

ALTER TABLE [dbo].lt_percent_cs 
    ADD CONSTRAINT [lt_percent_create_loc] 
     DEFAULT [dbo].fs_location() FOR [create_loc] 
GO 

SET IDENTITY_INSERT lt_percent_cs ON 

当我尝试插入数据(通过应用程序而不是通过代码)时,出现以下错误。

Last Error: Database update failed:
dataobject=

sqlca.sqlerrtext=SQLSTATE = 42000
Microsoft OLE DB Provider for SQL Server
Cannot insert explicit value for identity column in table 'lt_percent_cs' when IDENTITY_INSERT is set to OFF.

No changes made to database.

INSERT INTO lt_percent_cs (id_key, customer_no, season, percentage)
VALUES (54891, 80055514, 2017, 50)

sqlca.sqldbcode=544

sqlsyntax:
INSERT INTO lt_percent_cs (id_key, customer_no, season, percentage) VALUES (54891, 80055514, 2017, 50)

row:1 [nvo_ds_database.uf_update.34 (544)]

当我运行在SQL Server Management Studio中的脚本,我要补充,它的工作原理没有问题,也不会产生错误。

INSERT INTO lt_percent_cs (id_key, customer_no, season, percentage) 
VALUES (54891, 80055514, 2017, 50) 

有什么想法?从Insert语句,因为id_key是身份

回答

0

删除id_key播种

INSERT INTO lt_percent_cs (customer_no, season, percentage) VALUES (80055514, 2017, 50) 

否则申报id_key as integer Primary Key 然后插入应该工作

INSERT INTO lt_percent_cs (id_key, customer_no, season, percentage) VALUES (54891, 80055514, 2017, 50) 

既然你想批量插入数据,并保持身份,我可以建议ALTER id_key整数主键,然后批量插入然后改变字段回到身份到ON ...前进你不需要插入id_key

+0

奇怪的是,插入按原样工作 - 但应用程序的前端打破了,但您确实给了我一个有趣的想法。 – Elizabeth

+0

我写的脚本会发生什么 - 使用大量的数据,列是一个标识,它只是将数据导入到表中,并为每行创建一个新的标识。但是,应用程序的前端与其构建的方式是,它调用自己的过程来创建基于自己的规则的ID值,我不能使用身份(这是愚蠢的) - 所以我现在必须写一个游标使用系统创建所有ID值的过程。 – Elizabeth

+0

我明白你在做什么......你正在研究什么样的应用程序? – maSTAShuFu

0

如果你想在应用程序中插入一个明确的Id,你必须设置Identity_insert并插入一个事务中!我不知道,你正在使用哪个应用程序,但是这个规则是普遍的。