首页 > 解决方案 > 更新和插入语句之间的存储过程“忘记”字段

问题描述

我们有一个存储过程,用于UPDATE从现有列计算值的表。

我正在尝试将存储过程修改为将INSERT一行也放入另一个表中,使用同一列的值,但该列被解析器拒绝为无效的列名。

这是代码的精简版本。正如最初提供的那样sequence_no,存储过程已知并以reference_no. 即UPDATE作品,但INSERT失败了。

ALTER PROCEDURE [dbo].[update_references]
AS
    -- Original contents:
    UPDATE table1
    SET reference_no = sequence_no
    FROM table1 t1 WITH (NOLOCK)
    LEFT OUTER JOIN proptable p1 WITH (NOLOCK) ON t1.checkval = p1.checkval
    WHERE p1.fruit = 'apple'

    -- I have added the INSERT 
    INSERT INTO table2 (next_seq_no)
    VALUES (sequence_no)    

sequence_noSSMS 中用红色下划线。

标签: sql-serverstored-procedures

解决方案


代码中的插入语句对先前的更新一无所知,因此您不能从中引用随机列并期望它们仍在范围内。最简单的方法是使用OUTPUT子句。

UPDATE table1
SET reference_no = sequence_no
OUTPUT INSERTED.reference_no INTO table2 (next_seq_no)
FROM table1 t1
LEFT OUTER JOIN proptable p1 ON t1.checkval = p1.checkval
WHERE p1.fruit = 'apple'

推荐阅读