sql-server - 更新和插入语句之间的存储过程“忘记”字段
问题描述
我们有一个存储过程,用于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_no
SSMS 中用红色下划线。
解决方案
代码中的插入语句对先前的更新一无所知,因此您不能从中引用随机列并期望它们仍在范围内。最简单的方法是使用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'
推荐阅读
- java - 弹簧线程中断
- r - 使用 ggplot2 和 RColorBrewer 对数据点进行着色
- android - ContentResolver.query 返回 null(即使它从不返回 null)
- java - 没有在另一台设备上显示地理围栏圈,圈子只在一个设备上显示
- plugins - 用于新闻和事件的 Ckan 插件
- image - 图像在数组映射上不可见
- excel - 如何检查列的 1 文本是否存在于 Excel 的列 2 文本中
- ruby-on-rails - Nginx - Puma - Rails 堆栈中的 URI 应该在哪里解码?
- c# - C# linq 是否支持“反连接”语义?
- sails.js - 如何在sails js中获取上传的图片url