使用存储过程的最后一行中的单个值插入新行

Posted

技术标签:

【中文标题】使用存储过程的最后一行中的单个值插入新行【英文标题】:Insert a NEW Row using a Single Value from LAST row with Stored Procedure 【发布时间】:2020-11-08 18:14:40 【问题描述】:

请参阅下面的屏幕截图。

我正在尝试在 SQL Server 2014 中创建一个执行以下操作的存储过程:

    将 LAST 记录(例如第 #1062 行)中的“Complete”BIT 设置为 TRUE

    从 LAST 记录(以黄色突出显示)中获取“DateTo”值并将其插入到新行的“DateFrom”列中。

这应该是所有必需的,因为其他列(BatchID、DateTo、Complete)会自动填充。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

你需要两个语句。先更新最新行,再插入新行:

with cte as (select top (1) complete from billing_batch order by dateto desc)
update cte set complete = 1;

insert into billing_batch (datefrom)
select max(dateto) 
from billing_batch;

【讨论】:

尝试使用您的答案,@GMB 第二步完美!但是,在第一步,我收到一个错误“关键字'order'附近的语法不正确。” 我刚刚意识到@GMB,我还需要在新行的“datefrom”中添加 1 天,以便 7 天的计费周期正常工作 @CapnElectric: dateadd(day, 1, max(dateto))【参考方案2】:

这是你想要的吗?

update t
    set complete = 1
    from (select top (1) t.*
          from t
          order by datefrom desc
         ) t;

然后:

insert into t (datefrom, complete)
    select top (1) dateto, 0
    from t
    order by datefrom desc;

【讨论】:

以上是关于使用存储过程的最后一行中的单个值插入新行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL Server 中的存储过程在单个查询中插入多行

mysql存储过程,选择最大值并插入值并分配给变量

用于向表中添加新行的存储过程,它检查值以验证它们在外部表上的值

Informix:如何将单个参数中的多个值传递、使用和执行到存储过程

使用游标处理存储过程中表中的每一行

如何将多个值传递给存储过程中的单个参数