私は2つのテーブルを持っています。最初の名前はPAYMENT
で、2番目のテーブルはRecordPay
という履歴テーブルです。SQL Serverの履歴テーブル
私は2つのトリガーを持っていますが、最初のテーブルはPayment
テーブルから履歴テーブルのレコードに挿入するためのものです。ここで
はコードです:
ALTER TRIGGER [dbo].[INSERT_HIST]
ON [dbo].[PAYMENT]
FOR INSERT
AS
BEGIN
DECLARE @User_op varchar(50)
DECLARE @RGNO varchar(50)
DECLARE @PAYEUR varchar(50)
DECLARE @DATESYS SMALLDATETIME
DECLARE @RG_DATE SMALLDATETIME
DECLARE @RG_Montant varchar(50)
SELECT @User_op = cbUserName
FROM cbUserSession
WHERE cbSession = @@SPID
SELECT @PAYEUR = CT_NumPayeur FROM INSERTED
SELECT @DATESYS = GETDATE()
SELECT @RG_Montant = RG_Montant FROM INSERTED
SELECT @RG_DATE = RG_DATE FROM INSERTED
SELECT @RGNO = RG_No FROM INSERTED
INSERT INTO RecordPay (RG_NO, PAYEUR, CAISSIER, Montant, DATESYS, DATECAI)
VALUES (@RGNO, @PAYEUR, @user_op, @RG_Montant, @DATESYS, @RG_DATE)
これは私がRecordPay
で、PAYMENT
から行を削除すると、レコードが存在し、よく私の問題を動作し、私はPAYMENT
で別の行を挿入したとき、私は2 RG_NO
whithを持っていました同じ番号。
たとえば、PAYMENT
にRG_NO = 1の行を挿入して削除した後、RG_NO = 2の別の行を作成すると、recordPay(履歴表)にRG_NO = 1の2行が表示されます。ここで
は、削除のためのトリガーですが、それは
ALTER TRIGGER [dbo].[DEL_HIST]
ON [dbo].[PAYMENT]
AFTER DELETE
AS
BEGIN
DECLARE @User_op varchar(50)
DECLARE @RGNO varchar(50)
DECLARE @PAYEUR varchar(50)
DECLARE @DATESYS SMALLDATETIME
DECLARE @RG_DATE SMALLDATETIME
DECLARE @RG_Montant varchar(50)
SELECT @PAYEUR = CT_NumPayeur FROM DELETED
SELECT @RG_Montant = RG_Montant FROM DELETED
SELECT @RG_DATE = RG_DATE FROM DELETED
SELECT @RGNO = RG_No FROM DELETED
DELETE FROM RECORDPAY WHERE
[email protected] and PAYEUR= @PAYEUR and [email protected]_op and [email protected]_Montant
END
ホードは、トリガーの古典誤りを作りました。 'INSERTED'には1行しかないと仮定します。別の支払い処理の行は決して削除されません。支払いの取り消しは通常、最初の支払いを無効にするために別の支払いを行うことによって行われます。 – Jamiec
あなたの応答に感謝しますが、例を挙げることができます。私はそれを非常にうまく受け取りません。 – hollyx
あなたが '5'の支払いを削除したいなら、あなたは支払いの行を削除しません、それを平衡させるために' -5'の新しい支払いを入力します – Jamiec