sql-server - 更新后使用存储过程插入到同一个表中

标签 sql-server t-sql

我有以下职位表,其中职位每 28 天轮换一次。

添加新客户后,我最初将手动创建一项作业。

我想将“完成”列更新为 true,并将一条新记录插入到同一个表中,其中新作业指定完全相同的详细信息,仅使用新日期(28 天后),“完成”和“付费”值为 false 。

我尝试使用 FOR UPDATE 触发器但未成功,并且更愿意使用存储过程。

如何做到这一点?

CREATE TABLE [dbo].[Jobs](
    [JobID] [int] IDENTITY(1,1) NOT NULL,
    [CustomerID] [int] NOT NULL,
    [JobDate] [date] NOT NULL,
    [Price] [decimal](7, 2) NOT NULL,
    [Complete] [bit] NOT NULL,
    [Paid] [bit] NOT NULL,
CONSTRAINT [PK_Jobs] PRIMARY KEY CLUSTERED
CONSTRAINT [FK_CustomerID] FOREIGN KEY([CustomerID])
REFERENCES [dbo].[Customer] ([CustomerId])

最佳答案

尝试此操作来更新现有记录并基于它创建新记录:

CREATE PROC MyProc

@CustomerID int

AS

DECLARE @JobID int;
SELECT TOP 1 @JobID =  JobID 
FROM Jobs WHERE CustomerID = @CustomerID AND Complete = 0
ORDER BY JobDate DESC;

UPDATE Jobs
SET Complete = 1
WHERE JobID = @JobID;

INSERT Jobs(CustomerID, JobDate, Price, Complete, Paid)
  SELECT CustomerID, DATEADD(m,1,JobDate), Price, 0, 0
  FROM Jobs WHERE JobID = @JobID;

关于sql-server - 更新后使用存储过程插入到同一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19233599/

相关文章:

sql-server - 如何使用Lambda表达式将ResultSet中的数据放入HashMap?

sql - 将两列数据合二为一

sql - 在 SQL 中包含一个值但也排除该值

sql-server - SQL Server 中的存储过程在许多用户使用时执行速度非常慢

t-sql - 如何在SQL中计算平均日期出现频率

SQL 列 'Id' 被指定多次

python - 使用 Pandas/SQLAlchemy 导入日期时间

sql - `ON DELETE CASCADE` 多个外键导致死锁

sql - 允许在 SQL 查询中使用 *

sql - 如何在 SQL Server 中创建类似 .dbo 的架构 [2005]