-2

複数の行の更新を許可したいこのトリガーがあります。現在、単一の行の更新のみを処理しています。レコードを更新すると、サブクエリが複数の値を返すと言われます..

   GO
    ALTER TRIGGER [dbo].[OnReceiptUpdate]
    ON  [dbo].[paymentReceipt]
    AFTER UPDATE 
    AS 
    BEGIN   
    SET NOCOUNT ON;
    Declare   @correctdate VARCHAR(19);
   Declare   @receiptNo VARCHAR(50);
DECLARE @customerID NCHAR(50)
SET @customerID= (SELECT customerID FROM inserted)
 set @correctdate =  (SELECT CONVERT(VARCHAR(19),paymentDate,103) FROM inserted)   
  set @receiptNo =  (SELECT receiptNo FROM inserted)      
   BEGIN

   UPDATE Paymentreceipt
       SET paymentDate = @correctdate 
    WHERE customerID = @customerID and receiptNo=@receiptNo  
   END
 END
4

2 に答える 2

2
Update p
Set p.paymentDate = CONVERT(VARCHAR(19),i.paymentDate,103)
From Paymentreceipt p
inner join inserted i
On p.customerID = i.customerID and p.receiptNo = i.receiptNo

やるべきだと思います。

PS なぜ p.paymentdate は文字列なのですか? それはそれを求めています。

于 2013-06-02T12:46:13.187 に答える
1

最も簡単な方法は、トリガーで以下のような更新ステートメントを使用することです。

UPDATE Paymentreceipt
SET paymentDate = CONVERT(VARCHAR(19),paymentDate,103)
FROM inserted
WHERE Inserted.receiptNo  = Paymentreceipt.receiptNo
AND Inserted.customerID  = Paymentreceipt.customerID  

目の前に SQL サーバーがないので、構文が 100% 正しいとは限らないことに注意してください。

一般に、私はトリガーを回避しようとしますが、本当にトリガーが必要な場合はそれを使用しますが、ストアド プロシージャを使用することでこの問題に対処できる場合があります。

于 2013-06-02T12:33:06.150 に答える