1

これが私のテーブル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] に更新する必要があります。

新しい行を挿入すると、次のようになります

 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') 

今、私は単一のクエリまたはストアド プロシージャを使用してこれを行いたいと考えています。しかし、私はこれを行う方法がわかりませんか?

4

1 に答える 1

1

おそらく、トリガーを使用する方が良いでしょう。この方法ではINSERT、SP を使用する人に依存するのではなく、ロジックがすべての s に適用されます。また、 ieが成功した場合にのみ ieのUPDATE後に実行する方がよいでしょう。INSERTINSERT

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
于 2013-10-09T21:51:09.473 に答える