我有下表:
CREATE TABLE Seq2 (val INT NOT NULL IDENTITY);
如果知道我尝试了以下方法,如何填充此表:
INSERT INTO Seq2(val) VALUES (1)
我有以下错误:当identity\u insert设置为off时,无法为表“seq2”中的identity列插入显式值。
d4so4syb1#
简单地说,启用 IDENTITY_INSERT 为了table。看起来是这样的:
IDENTITY_INSERT
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 //获取会话中生成的最后一个标识值,而不考虑作用域
SELECT SCOPE_IDENTITY()
SELECT @@IDENTITY
w6lpcovy2#
如果我必须说的话,有这样一张table似乎完全没有意义。如果table上只有 IDENTITY 那么它实际上没有任何意义,所以它在那里是没有意义的。也就是说,如果你有这样一张table,你可以 INSERT 价值观 IDENTITY 使用 DEFAULT VALUES :
IDENTITY
INSERT
DEFAULT VALUES
INSERT INTO dbo.Seq2 DEFAULT VALUES; INSERT INTO dbo.Seq2 DEFAULT VALUES;
对于新表,这将创建具有值的行 1 以及 2 .如果你想明确 INSERT 值放入表中,然后最好删除 IDENTITY 选项。考虑到这是一张新table DROP 然后用 IDENTITY 属性:
1
2
DROP
DROP TABLE dbo.Seq2; GO CREATE TABLE Seq2 (val INT NOT NULL);
有一张有单人床的table IDENTITY 列,然后您将为其定义结果实际上是毫无意义的。或者不要使用 IDENTITY 定义值,或使用 IDENTITY 让sql server来处理。
ergxz8rk3#
SET IDENTITY_INSERT Seq2 ON INSERT INTO Seq2(val)VALUES (1) SET IDENTITY_INSERT Seq2 OFF
3条答案
按热度按时间d4so4syb1#
简单地说,启用
IDENTITY_INSERT
为了table。看起来是这样的:请记住:
一次只能在一个表上启用。如果在第二个表上尝试启用它,而在第一个表上仍然启用它,sql server将生成一个错误。
在表上启用时,必须为标识列指定一个值。
发出该语句的用户必须拥有该对象、是系统管理员(sysadmin角色)、是数据库所有者(dbo)或是db\u ddladmin角色的成员才能运行该命令。
SELECT SCOPE_IDENTITY()
//获取在同一会话和作用域中生成的最后一个标识值SELECT @@IDENTITY
//获取会话中生成的最后一个标识值,而不考虑作用域w6lpcovy2#
如果我必须说的话,有这样一张table似乎完全没有意义。如果table上只有
IDENTITY
那么它实际上没有任何意义,所以它在那里是没有意义的。也就是说,如果你有这样一张table,你可以
INSERT
价值观IDENTITY
使用DEFAULT VALUES
:对于新表,这将创建具有值的行
1
以及2
.如果你想明确
INSERT
值放入表中,然后最好删除IDENTITY
选项。考虑到这是一张新tableDROP
然后用IDENTITY
属性:有一张有单人床的table
IDENTITY
列,然后您将为其定义结果实际上是毫无意义的。或者不要使用IDENTITY
定义值,或使用IDENTITY
让sql server来处理。ergxz8rk3#