存储过程INSERT关联参数表输出标识时出现标识符绑定失败问题求助
解决INSERT语句OUTPUT子句中无法绑定源表字段的问题
这个报错的原因很明确:INSERT语句的OUTPUT子句只能访问inserted虚拟表(存储刚插入的新行数据)里的字段,没办法直接引用SELECT子句里源表变量@p2的别名OS的字段——这和UPDATE的逻辑不一样,UPDATE时因为有目标表和源表的关联,所以可以同时引用虚拟表和源表,但INSERT没有这种关联映射,自然找不到OS.IdObjectSubTypeTemp。
给你一个可行的解决方案:用MERGE语句替代普通INSERT,因为MERGE的OUTPUT子句支持直接引用源数据集的字段,具体代码如下:
MERGE INTO [dbo].[ObjectSubType] AS Target USING @p2 AS Source ON 1 = 0 -- 这个条件永远不成立,确保只会执行INSERT操作 WHEN NOT MATCHED THEN INSERT ([IdObject], [IdSubType]) VALUES (Source.[IdObject], Source.[IdSubType]) OUTPUT inserted.[IdObjectSubType], Source.[IdObjectSubTypeTemp] INTO @IdObjectSubTypeTbl;
代码说明:
ON 1=0是关键:它让MERGE永远无法匹配到目标表ObjectSubType里的任何行,所以只会触发WHEN NOT MATCHED THEN的分支,效果和你原来的INSERT完全一致。- 这时候在OUTPUT子句里,就可以同时获取插入后生成的
inserted.IdObjectSubType,以及源表变量@p2里的Source.IdObjectSubTypeTemp,顺利插入到@IdObjectSubTypeTbl中。
内容的提问来源于stack exchange,提问作者User7291
相关产品推荐
相关产品推荐

