这是我的表CustInfo的结构
Cm_ID | Cust_ID | StartDate | EndDate | Status
1 | 1020 | 05/09/2013 | 20/09/2013 | Off
2 | 1027 | 16/09/2013 | **31/12/2099** | **On**
3 | 1020 | 21/09/2013 | 31/12/2099 | On
每当我为Cust_ID = 1027插入一个新行时,我想这样做。它应该首先将[EndDate]更新为新的[StartDate],即Today和Set [Status] ='Off'。
插入新行后,它应该如下所示
Cm_ID | Cust_ID | StartDate | EndDate | Status
1 | 1020 | 05/09/2013 | 20/09/2013 | Off
2 | 1027 | 16/09/2013 | **30/09/2013** | **Off**
3 | 1020 | 21/09/2013 | 31/12/2099 | On
4 | 1027 | 01/10/2013 | 31/12/2099 | On
我使用2个不同的查询完成了此操作,如下所示。
Update CustInfo SET EndDate = '30/09/2013' ,Status='Off'
WHERE Cm_ID=(SELECT MAX(Cm_ID) FROM CustInfo WHERE EndDate='12/31/2099' AND Cust_ID=1027)
INSERT INTO CustInfo ([Cust_ID], [StartDate], [EndDate], [CurrentStatus])
VALUES(1027,'01/10/2013','12/31/2099','On')
现在我想使用单个查询或存储过程来执行此操作。但我不知道该怎么做?
答案 0 :(得分:1)
您可能最好使用触发器,这样逻辑就会应用于所有INSERT
,而不是依赖于使用SP的人。另外,最好在UPDATE
之后执行INSERT
,即仅在INSERT
成功时执行。{/ p>
CREATE TRIGGER trgCustInfo_Status
ON CustInfo
AFTER INSERT
AS
BEGIN
DECLARE @id INT
SELECT @id = Id
FROM (
SELECT Id, ROW_NUMBER() OVER (ORDER BY Id DESC) rn
FROM CustInfo
) t
WHERE rn=2
UPDATE CustInfo
SET EndDate = CAST(GETDATE() AS DATE),
Status = 'OFF'
WHERE Id = @id
END