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

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

最后一个错误:数据库更新失败:
dataobject=

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

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

插入 lt_percent_cs (id_key, customer_no, season, percent)
VALUES (54891, 80055514, 2017, 50)

sqlca.sqldbcode=544

sqlsyntax:
INSERT INTO lt_percent_cs (id_key, customer_no, season, percent) 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)

有什么想法吗?

4

2 回答 2

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

于 2017-10-11T21:17:37.627 回答
0

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

于 2017-10-11T21:27:32.697 回答