SET IDENTITY_INSERT (Transact-SQL) 允许将显式值插入到表的标识列中

Posted awarning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SET IDENTITY_INSERT (Transact-SQL) 允许将显式值插入到表的标识列中相关的知识,希望对你有一定的参考价值。

https://docs.microsoft.com/zh-cn/sql/t-sql/statements/set-identity-insert-transact-sql

IDENTITY_INSERT 是否允许手动将显式值插入到表的标识列中,ON允许,OFF不允许

插入数据时,自增长列是系统自动处理,不需要你来指定数值,你也指定不了。只有将IDENTITY_INSERT 为 ON 时插入数据时,自增长列你才可以指定一个值

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

表 ‘xxx.dbo.aaa‘ 的 IDENTITY_INSERT 已经为 ON。无法为表 ‘bbb‘ 执行 SET 操作。

可以先将前面的表设置成OFF,再打开要修改表为ON,

SET IDENTITY_INSERT XXX ON
GO
INSERT INTO XXX(id)
SELECT id FROM AAA
GO
SET IDENTITY_INSERT XXX off
GO
----------------------------------------
SET IDENTITY_INSERT YYY ON
GO
INSERT INTO YYY(id)
SELECT id FROM AAA
GO
SET IDENTITY_INSERT YYY off
GO

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

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

set IDENTITY_INSERT 表名 on
set IDENTITY_INSERT 表名 off

总结:
1.每一个连接会话中的任一时刻,只能对一个表设置IDENTITY_INSERT ON,且设置只对当前会话有效;
2.在对标识列执行插入操作进,一定要列出此标识列。




以上是关于SET IDENTITY_INSERT (Transact-SQL) 允许将显式值插入到表的标识列中的主要内容,如果未能解决你的问题,请参考以下文章

set IDENTITY_INSERT on 和 off 的设置

DBCC CHECKIDENT 和SET IDENTITY_INSERT table OFF

SET IDENTITY_INSERT 在我的参数里面它不起作用

SET IDENTITY_INSERT OFF 的数据库范围等效项

强制 SET IDENTITY_INSERT 从 MS Access 更快生效

sqlserver中set IDENTITY_INSERT on 和 off 的设置方法