2013-10-07 53 views
2

我有以下作业表,其中作业将每28天旋转一次。使用存储过程更新,然后插入同一表

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

我想将完整列更新为true,并将新记录插入到同一张表中,新作业仅指定完全相同的详细信息,并将新的日期(28天后)与Complete和Paid值一起指定为假。

我尝试使用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]) 

回答

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; 
+0

p.campbell这是鲍勃。感谢您抽出时间,非常感谢。 –

+1

@AlistairMorris非常欢迎!此外,冒着投票饥渴的风险,你应该提供帮助以及绿色复选标记的答案:)这是StackOverflow的信誉系统。它有助于他人判断质量的答案和问题。 –

相关问题