当前位置: 首页 > news >正文

SQL Server中关于 INSERTED.Id 与 SCOPE_IDENTITY() 获取新增数据的Id

前景:

通过程序将一个数据库的主表+子表的数据迁移至新的数据库,表的id未自增长,源数据存在删除的情况,所以需要获取插入数据新增id和旧id的比对关系数据

通过如下语句来获取新旧id

BEGIN TRY  BEGIN TRANSACTION;DECLARE @Map TABLE (OldId int, Id int);--临时表存储新旧idINSERT INTO SupportGroup (CompanyId,GroupCode,GroupName,Description,Status,Type,CreationDate,CreatedBy,UpdatedDate,UpdatedBy)OUTPUT INSERTED.Id,86 INTO @Map(Id,OldId)VALUES (N'86',N'T-86',N'全部权限',N'',1,1,'2023/9/21 10:09:32',N'TEST01','2025/9/16 10:45:00',N'TEST01');INSERT INTO SupportGroup (CompanyId,GroupCode,GroupName,Description,Status,Type,CreationDate,CreatedBy,UpdatedDate,UpdatedBy)OUTPUT SCOPE_IDENTITY(),87 INTO @Map(Id,OldId)VALUES (N'87',N'T-87',N'VND全部',N'',1,1,'2023/9/21 14:04:44',N'TEST01','2023/9/21 14:04:44',N'TEST01');INSERT INTO SupportGroup (CompanyId,GroupCode,GroupName,Description,Status,Type,CreationDate,CreatedBy,UpdatedDate,UpdatedBy)OUTPUT SCOPE_IDENTITY(),108 INTO @Map(Id,OldId)VALUES (N'108',N'T-108',N'wl_test',N'测试222',1,1,'2025/8/21 11:55:57',N'TEST01','2025/8/27 15:56:30',N'TEST01');COMMIT TRANSACTION;  -- 一切正常就提交
END TRY
BEGIN CATCHIF XACT_STATE() <> 0ROLLBACK TRANSACTION;  -- 出错就回滚-- 把错误抛出来(可选)DECLARE @errMsg nvarchar(4000) = ERROR_MESSAGE();RAISERROR (@errMsg, 16, 1);END CATCH;
SELECT OldId, Id FROM @Map;--获取新旧id

 

异常:

这个语句在数据库中执行没有任何问题,也能正常返回新旧id列表,但是在程序中执行这个语句就会出现一个问题

1.返回的一条新旧id数据中,新id是空的,且只有前面30 条<总共批量插入119条>被DBRearder读出来了,后面的89条出现异常(“数据提示不可用,不是有效的格式说明符”)

 

原因:

1.首先OUTPUT 子句里 SCOPE_IDENTITY() 语法上就被禁止

2.即使将来允许,它返回的也是“当前作用域里最后一条 INSERT 产生的 ID”,而 OUTPUT 子句是逐行触发的,语义上就会互相覆盖

3.OUTPUT 只认 INSERTED.Id

 

初衷:

鉴于之前的了解SCOPE_IDENTITY()获取的是作用域内新增数据的id,而 INSERTED.Id获取的是这张表最新新增数据的id,可能获取到的是其他途径新增的id

所以此处就使用SCOPE_IDENTITY()来获取新增数据的Id

 

特别的:

后了解到在OUTPUT 中使用INSERTED.Id 直接拿到“本条正在插入的行”的身份值,与并发、与顺序、与作用域都无关。

 

解决:

将SCOPE_IDENTITY()改为使用INSERTED.Id 获取本条新增数据的Id

 

http://www.hskmm.com/?act=detail&tid=33074

相关文章:

  • 2025年鸡精生产线/鸡精生产设备厂家推荐排行榜,高效节能与智能化生产之选!
  • neural network中的tensor是什么?
  • 2025年工厂维保,工厂机电维修,工厂应急维修,工厂运维服务厂家推荐排行榜,专业高效与全方位保障之选!
  • 2025/10/17
  • 2025年视频拍摄服务权威推荐榜:创意剪辑与高清画质完美结合,打造视觉盛宴!
  • pytorch p66实训二
  • 有没有人坐11.1号晚上9点的火车返回衡水,大家要一起走么
  • 2025年10月权威更新:门头/仿木纹板/拉网/铝复合板/锥芯板/太空舱/铝蜂窝板/铝单板厂家排行榜前十强推荐与选购指南四川汇才以实力登顶
  • 2025年网络推广服务商权威推荐榜单,SEO优化,SEM营销,社交媒体推广,内容营销公司推荐
  • 日志分析-Tomcat日志分析
  • Cursor国内用户无法使用模型(Model not avilable)解决方案
  • 2025年手持式光谱仪厂家权威推荐榜单:精准检测与便携操作的行业首选!
  • 图像恢复任务
  • 2025年冷轧机/热轧机厂家推荐排行榜,专业生产与技术创新实力之选!
  • CF1325F Ehabs Last Theorem 题解
  • 2025年解冻设备厂家权威推荐榜单:高效节能与智能控制的行业首选!
  • Notepad++中替换时保留分组字符
  • 2025年10月休闲食品品牌权威评测与推荐:用数据说话的全景选购指南
  • 2025年10月PE管厂家推荐榜:茗杰建华领衔的对比评测与选购指南
  • 2025年棋牌室加盟权威推荐榜单:精选品牌,专业服务与市场口碑深度解析!
  • 2025 年数控铣床厂家最新推荐榜单:双头 / 双面 / 龙门 / 双侧 / 新型 / 双端面 / 平面 / 双头龙门设备优质厂家排行及选购攻略
  • 2025年10月超声波清洗机厂家推荐:榜单透视与选购要点
  • 2025年混合机厂家推荐排行榜,槽型/卧式槽型/双螺旋锥形/螺杆锥形/高速/立式高速/方锥/方锥型/螺带/卧式螺带/V型/双锥/一维/一维运动/二维/二维运动/三维运动/三维混合机公司推荐
  • 707. 设计链表
  • OpenCSG 派拉软件:打造企业级AI平台,安全高效加速AI应用落地
  • PhotoShop网页版为人像换背景,一键完成抠图换景
  • 2025年铝单板厂家推荐排行榜,氟碳/木纹/冲孔/外墙/雕花/异形/双曲/弧形/雕刻铝单板公司精选!
  • 2025年机电安装厂家权威推荐榜单:覆盖管道/电气/生物医药工厂/暖通空调/空压系统/纯水系统/厂房通风/车间配电/机械设备安装,专业服务之选!
  • 2025年网络推广/网络营销/网络营销推广服务商权威推荐榜单,专业策略与高效转化口碑之选!
  • 03-转义字符