在SQL Server中,插入特定值到身份列最简单的方法是先临时关闭IDENTITY_INSERT:
SET IDENTITY_INSERT your_table ON;
INSERT INTO your_table (ID, Name) VALUES (100, 'Test');
SET IDENTITY_INSERT your_table OFF;
网友分享1
我用这个方法很多年了,超级管用!就是SET IDENTITY_INSERT表名 ON,然后INSERT指定ID值,最后OFF就行。记得只能一次开一次关,不然报错。
网友分享2
对于MySQL的自增列,想插特定值,直接在INSERT语句里写上id字段就行,不需要额外设置。像INSERT INTO table (id, name) VALUES (5, 'abc'); 它会接受的,前提是那个值没被占。
网友分享3
PostgreSQL里用OVERRIDING SYSTEM USER VALUE:INSERT INTO table (id, name) OVERRIDING SYSTEM VALUE VALUES (999, 'override'); 这样就能强制插特定ID了,数据迁移神器。
网友分享4
遇到冲突怎么办?先查SELECT IDENT_CURRENT('表名')看当前最大ID,然后从那里开始插,避免重复。SQL Server特有命令,很方便。
网友分享5
Oracle的序列,创建序列后用INSERT时指定.nextval或直接给固定值,但固定值要小心序列不一致。推荐用DBMS_METADATA包处理。
网友分享6
批量插特定ID,用临时表或MERGE语句结合IDENTITY_INSERT,效率高。实际项目里这样导数据,省时省力。
FAQ
Q: IDENTITY_INSERT只能开一个表吗?
A: 是的,一次只能针对一个表开启。
Q: MySQL插特定ID会影响自增计数吗?
A: 会,按最大值更新AUTO_INCREMENT。
Q: 关闭IDENTITY_INSERT后还能插吗?
A: 能,但ID会自动生成,不能手动指定。
Q: 怎么查当前身份种子值?
A: 用SELECT IDENT_CURRENT('表名')。