插入时生成标识插入错误(不在代码中)

时间:2017-10-11 21:12:23

标签: sql-server insert create-table identity-insert

我尝试使用以下代码构建表格 - 创建表格时没有错误,我可以看到针灸,并且它显示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

当我尝试插入数据时(通过应用程序而非通过代码),我收到以下错误。

  

上次错误:数据库更新失败:
  dataobject =

     

sqlca.sqlerrtext = SQLSTATE = 42000
  用于SQL Server的Microsoft OLE DB提供程序
  无法为表格中的标识列插入显式值< lt_percent_cs'当IDENTITY_INSERT设置为OFF时。

     

没有对数据库进行任何更改。

     

INSERT INTO lt_percent_cs(id_key,customer_no,season,percentage)
  价值观(54891,80055514,2017,50)

     

sqlca.sqldbcode = 544

     

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

     

行: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)

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

从插入语句中删除id_key,因为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 )

由于你想要批量插入数据并保持身份我可以建议将id_key改为整数主键,然后批量插入然后将字段改回标识为ON ...继续你不需要插入id_key

答案 1 :(得分:0)

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