2

我有以下工作表,其中工作将每 28 天轮换一次。

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

我想将 Complete 列更新为 true,并将新记录插入到同一个表中,并使用新作业指定完全相同的详细信息,仅使用新日期(28 天后)将 Complete 和 Paid 值设置为 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])
4

1 回答 1

2

试试这个来更新现有记录并基于它创建一个新记录:

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;
于 2013-10-07T20:21:40.143 回答