IDENTITY INSERT 注意事项,帮你避免踩坑!

吉云

今儿个,咱来聊聊我在数据库里捣鼓的一点小经验,跟IDENTITY_INSERT这玩意儿有关。

话说前两天,我不是在整一个项目嘛需要把一部分数据从旧的数据库搬到新的数据库里。这数据表里头,有一个自增的ID列,就是那种你插入一条数据,它就自动给你加1的那种。平时用着挺方便,可这回搬家就有点麻烦。

我直接用INSERT INTO语句往新表里塞数据,结果报错。数据库那叫一个倔强,非说我不能给那个自增的ID列赋值。想想也是,人家设计成自增,就是不想让你管,你非要插一脚,它当然不乐意。

IDENTITY INSERT 注意事项,帮你避免踩坑!

后来我就去网上查资料,看看有没有啥法子。你别说,还真让我找到,就是这个IDENTITY_INSERT

这玩意儿咋用?也简单。就是在你执行INSERT语句之前,先给数据库打个招呼,说:“老兄,我等会儿要手动给你那个自增的ID列赋值,你先别管我,让我插进去。”

这“打招呼”的语句就是:

  • SET IDENTITY_INSERT 你的表名 ON;

IDENTITY INSERT 注意事项,帮你避免踩坑!

这样一搞,数据库就老实,乖乖地让你把数据插进去,包括那个自增的ID列。

不过这还没完。等你把数据都插完,还得再跟数据库说一声:“行,老兄,我这边完事,你继续按你的规矩来。”

这“收工”的语句就是:

  • SET IDENTITY_INSERT 你的表名 OFF;

IDENTITY INSERT 注意事项,帮你避免踩坑!

这一来一回,才算把这事儿给办妥。要不然,数据库还以为你要一直手动赋值,那以后再插入新数据,可就乱套。

实践出真知

我把这个过程简单

  1. 开启SET IDENTITY_INSERT 你的表名 ON;
  2. 插入数据INSERT INTO 你的表名 (ID, 其他列...) VALUES (你的ID值, 其他值...);
  3. IDENTITY INSERT 注意事项,帮你避免踩坑!

  4. 关闭SET IDENTITY_INSERT 你的表名 OFF;

这么一折腾,数据搬家的问题就解决。不过我也算是明白,这数据库里的道道还真不少,以后还得继续摸索,跟大家伙儿一起分享!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]