自动标识增量的列,如何插入一行数据

时间:2020-11-25 15:04:18
比如我有StudentId,LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex这几列
StudentId是自动增加1的
我的代码如下
insert into Student(StudentId,LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex) 
values(111,'111','111','111',111,'111','111','男')

但是报错了 没法插入数据
消息 544,级别 16,状态 1,第 1 行
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'Student' 中的标识列插入显式值。
请问大家这是什么问题 先谢谢了

13 个解决方案

#1


去掉自增列.然后插入数据.
例如:

insert into Student(LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex) 
values('111','111','111',111,'111','111','男')

#2


或者你参考如下的内容:
SET IDENTITY_INSERT
允许将显式值插入表的标识列中。

语法
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }

参数
database

是指定的表所驻留的数据库名称。

owner

是表所有者的名称。

table

是含有标识列的表名。

注释
任何时候,会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,并且为另一个表发出了 SET IDENTITY_INSERT ON 语句,则 Microsoft® SQL Server™ 返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON 并报告此属性已设置为 ON 的表。

如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用。

SET IDENTITY_INSERT 的设置是在执行或运行时设置,而不是在分析时设置。

权限
执行权限默认授予 sysadmin 固定服务器角色和 db_owner 及 db_ddladmin 固定数据库角色以及对象所有者。

示例
下例创建一个含有标识列的表,并显示如何使用 SET IDENTITY_INSERT 设置填充由 DELETE 语句导致的标识值中的空隙。

-- Create products table.
CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
GO
-- Inserting values into products table.
INSERT INTO products (product) VALUES ('screwdriver')
INSERT INTO products (product) VALUES ('hammer')
INSERT INTO products (product) VALUES ('saw')
INSERT INTO products (product) VALUES ('shovel')
GO

-- Create a gap in the identity values.
DELETE products 
WHERE product = 'saw'
GO

SELECT * 
FROM products
GO

-- Attempt to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO products (id, product) VALUES(3, 'garden shovel')
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT products ON
GO

-- Attempt to insert an explicit ID value of 3
INSERT INTO products (id, product) VALUES(3, 'garden shovel').
GO

SELECT * 
FROM products
GO
-- Drop products table.
DROP TABLE products
GO

#3


引用 1 楼 dawugui 的回复:
去掉自增列.然后插入数据.
例如:

insert into Student(LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex) 
values('111','111','111',111,'111','111','男')

不去掉怎么做啊

#4


看2F,很详细了

#5


引用 3 楼 wenwei19861106 的回复:
引用 1 楼 dawugui 的回复:
去掉自增列.然后插入数据.
例如:

insert into Student(LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex)
values('111','111','111',111,'111','111','男')

不去掉怎么做啊

不去掉的话,看2楼说明.

#6


联机帮助文档里有说明。

#7


引用 4 楼 forfumm 的回复:
看2F,很详细了

看不太懂啊 要是我这个要怎么改啊 我很纠结 麻烦您了啊

#8


而且这里insert和我的有什么区别吗
-- Attempt to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO products (id, product) VALUES(3, 'garden shovel')
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT products ON
GO

-- Attempt to insert an explicit ID value of 3
INSERT INTO products (id, product) VALUES(3, 'garden shovel').
GO

#9


IDENTITY_INSERT 设置为 OFF ?
set IDENTITY_INSERT Student on ?

#10


set IDENTITY_INSERT ON --开启
GO
insert into Student(StudentId,LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex) 
values(111,'111','111','111',111,'111','111','男')
GO
set IDENTITY_INSERT OFF  --关闭

#11


IDENTITY_INSERT 
这东西还真变态。
insert into t1 values(1,'1)
这样不行,必须
insert into t1(id,name) values(1,'1')

#12


2楼的解释很好。
顶。。

#13



set IDENTITY_INSERT ON --开启
GO
insert into Student(StudentId,LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex) 
values(111,'111','111','111',111,'111','111','男')
GO
set IDENTITY_INSERT OFF  --关闭

#1


去掉自增列.然后插入数据.
例如:

insert into Student(LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex) 
values('111','111','111',111,'111','111','男')

#2


或者你参考如下的内容:
SET IDENTITY_INSERT
允许将显式值插入表的标识列中。

语法
SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }

参数
database

是指定的表所驻留的数据库名称。

owner

是表所有者的名称。

table

是含有标识列的表名。

注释
任何时候,会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,并且为另一个表发出了 SET IDENTITY_INSERT ON 语句,则 Microsoft® SQL Server™ 返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON 并报告此属性已设置为 ON 的表。

如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用。

SET IDENTITY_INSERT 的设置是在执行或运行时设置,而不是在分析时设置。

权限
执行权限默认授予 sysadmin 固定服务器角色和 db_owner 及 db_ddladmin 固定数据库角色以及对象所有者。

示例
下例创建一个含有标识列的表,并显示如何使用 SET IDENTITY_INSERT 设置填充由 DELETE 语句导致的标识值中的空隙。

-- Create products table.
CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))
GO
-- Inserting values into products table.
INSERT INTO products (product) VALUES ('screwdriver')
INSERT INTO products (product) VALUES ('hammer')
INSERT INTO products (product) VALUES ('saw')
INSERT INTO products (product) VALUES ('shovel')
GO

-- Create a gap in the identity values.
DELETE products 
WHERE product = 'saw'
GO

SELECT * 
FROM products
GO

-- Attempt to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO products (id, product) VALUES(3, 'garden shovel')
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT products ON
GO

-- Attempt to insert an explicit ID value of 3
INSERT INTO products (id, product) VALUES(3, 'garden shovel').
GO

SELECT * 
FROM products
GO
-- Drop products table.
DROP TABLE products
GO

#3


引用 1 楼 dawugui 的回复:
去掉自增列.然后插入数据.
例如:

insert into Student(LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex) 
values('111','111','111',111,'111','111','男')

不去掉怎么做啊

#4


看2F,很详细了

#5


引用 3 楼 wenwei19861106 的回复:
引用 1 楼 dawugui 的回复:
去掉自增列.然后插入数据.
例如:

insert into Student(LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex)
values('111','111','111',111,'111','111','男')

不去掉怎么做啊

不去掉的话,看2楼说明.

#6


联机帮助文档里有说明。

#7


引用 4 楼 forfumm 的回复:
看2F,很详细了

看不太懂啊 要是我这个要怎么改啊 我很纠结 麻烦您了啊

#8


而且这里insert和我的有什么区别吗
-- Attempt to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO products (id, product) VALUES(3, 'garden shovel')
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT products ON
GO

-- Attempt to insert an explicit ID value of 3
INSERT INTO products (id, product) VALUES(3, 'garden shovel').
GO

#9


IDENTITY_INSERT 设置为 OFF ?
set IDENTITY_INSERT Student on ?

#10


set IDENTITY_INSERT ON --开启
GO
insert into Student(StudentId,LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex) 
values(111,'111','111','111',111,'111','111','男')
GO
set IDENTITY_INSERT OFF  --关闭

#11


IDENTITY_INSERT 
这东西还真变态。
insert into t1 values(1,'1)
这样不行,必须
insert into t1(id,name) values(1,'1')

#12


2楼的解释很好。
顶。。

#13



set IDENTITY_INSERT ON --开启
GO
insert into Student(StudentId,LoginId,LoginPwd,UserStateId,ClassId,StudentNO,StudentName,Sex) 
values(111,'111','111','111',111,'111','111','男')
GO
set IDENTITY_INSERT OFF  --关闭