You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否设置按ID插入为可选?开启IDENTITY_INSERT后兼容两种插入语句

两种INSERT语句共存的解决方案

完全可以让这两种插入方式同时生效,核心是按需切换IDENTITY_INSERT的开关状态——SQL Server对这个选项的规则很明确:

  • 当IDENTITY_INSERT设为ON时,你必须显式指定自增列(ID)的值才能插入数据;
  • 当它设为OFF时(默认状态),数据库会自动用自增逻辑生成ID,此时你不用在INSERT语句里指定ID列的值。

具体操作步骤

1. 手动插入指定ID时

先打开开关,插入完成后立刻关闭:

-- 开启自增列手动插入权限
SET IDENTITY_INSERT TsiList ON;

-- 执行带指定ID的插入
INSERT INTO TsiList (ID, something_else) VALUES (15, 'foo');

-- 用完务必关闭,避免影响后续自动插入
SET IDENTITY_INSERT TsiList OFF;

2. 让自增自动生成ID时

确保IDENTITY_INSERT处于关闭状态(默认就是OFF,只要你之前用完没忘关),直接执行不带ID的插入:

INSERT INTO TsiList (something_else) VALUES ('foo');

关键注意事项

  • 同一数据库中,同一时刻只能有一个表的IDENTITY_INSERT处于ON状态,所以手动插入完成后一定要及时关闭,否则其他表要开启这个选项会报错。
  • 手动插入的ID不能和表中已存在的ID重复,否则会触发主键/唯一键冲突错误。
  • 如果你担心忘记关闭开关,可以用事务包裹操作,确保开关成对执行,避免异常情况下状态紊乱:
BEGIN TRANSACTION;
SET IDENTITY_INSERT TsiList ON;
INSERT INTO TsiList (ID, something_else) VALUES (15, 'foo');
SET IDENTITY_INSERT TsiList OFF;
COMMIT TRANSACTION;

内容的提问来源于stack exchange,提问作者Sven Engling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:29:29