sql—插入到只包含标识列的表中

vnzz0bqm  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(333)

我有下表:

CREATE TABLE Seq2 (val INT NOT NULL IDENTITY);

如果知道我尝试了以下方法,如何填充此表:

INSERT INTO Seq2(val) VALUES (1)

我有以下错误:
当identity\u insert设置为off时,无法为表“seq2”中的identity列插入显式值。

d4so4syb

d4so4syb1#

简单地说,启用 IDENTITY_INSERT 为了table。看起来是这样的:

SET IDENTITY_INSERT IdentityTable ON

INSERT INTO Seq2(val) VALUES (1)

SET IDENTITY_INSERT IdentityTable OFF

请记住:
一次只能在一个表上启用。如果在第二个表上尝试启用它,而在第一个表上仍然启用它,sql server将生成一个错误。
在表上启用时,必须为标识列指定一个值。
发出该语句的用户必须拥有该对象、是系统管理员(sysadmin角色)、是数据库所有者(dbo)或是db\u ddladmin角色的成员才能运行该命令。 SELECT SCOPE_IDENTITY() //获取在同一会话和作用域中生成的最后一个标识值 SELECT @@IDENTITY //获取会话中生成的最后一个标识值,而不考虑作用域

w6lpcovy

w6lpcovy2#

如果我必须说的话,有这样一张table似乎完全没有意义。如果table上只有 IDENTITY 那么它实际上没有任何意义,所以它在那里是没有意义的。
也就是说,如果你有这样一张table,你可以 INSERT 价值观 IDENTITY 使用 DEFAULT VALUES :

INSERT INTO dbo.Seq2
DEFAULT VALUES;

INSERT INTO dbo.Seq2
DEFAULT VALUES;

对于新表,这将创建具有值的行 1 以及 2 .
如果你想明确 INSERT 值放入表中,然后最好删除 IDENTITY 选项。考虑到这是一张新table DROP 然后用 IDENTITY 属性:

DROP TABLE dbo.Seq2;
GO
CREATE TABLE Seq2 (val INT NOT NULL);

有一张有单人床的table IDENTITY 列,然后您将为其定义结果实际上是毫无意义的。或者不要使用 IDENTITY 定义值,或使用 IDENTITY 让sql server来处理。

ergxz8rk

ergxz8rk3#

SET IDENTITY_INSERT Seq2 ON
 INSERT INTO Seq2(val)VALUES (1) 
SET IDENTITY_INSERT Seq2 OFF

相关问题