我尝试使用以下代码构建表格 - 创建表格时没有错误,我可以看到针灸,并且它显示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)
有什么想法吗?
答案 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并插入一个事务中!我不知道你正在使用哪个应用程序,但这个规则是通用的。