我有以下职位表,其中职位每 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/