別のテーブルが更新されたときに、あるテーブルに提出された日付を更新できるようにしたい。次の2つのテーブルがあります:Transdetails
、Customers
。
Customers
テーブルには、ZLastDateOfSale
というフィールドがあります。 Transdetails.TradingDate
が顧客ごとに更新されたときに、このフィールドを現在の日付で更新してください。
このトリガーの作成を手伝っていただけませんか?
私の例は以下です:
CREATE TRIGGER trg_LastSaleDate ON dbo.Transheaders
AFTER UPDATE
AS
IF UPDATE(TradingDate)
BEGIN
update dbo.Customers
set dbo.Customers.ZLastSale = dbo.Transheaders.TradingDate
from dbo.Customers
END
2014年5月11日更新の例:
CREATE TRIGGER trg_LastSaleDate ON dbo.Transheaders
AFTER UPDATE
AS
IF UPDATE(TradingDate)
BEGIN
UPDATE c
SET ZLastSales = i.TradingDate
FROM dbo.Customers AS c
JOIN inserted AS i
ON i.UniqueID = c.UniqueID -- use the appropriate column for joining
JOIN deleted AS d
ON i.AccountID = d.AccountID
AND ( i.TradingDate <> d.TradingDate
OR d.TradingDate IS NULL
) ;
END ;
こんにちは、
ご意見、ご感想をありがとうございました。提供された例を変更してスクリプトを実行しましたが、成功しましたが、今日の日付ですべての顧客のZLastSale日付を更新することでした。このフィールドは空白である必要があり、トリガーが起動したときにのみ、今後更新されます。このフィールドは、顧客からの販売時にのみ更新する必要があります。
また、2014年5月30日の日付で新しいトランザクションの入力をテストしたところ、必須のZLastSaleフィールドが更新されませんでした。それは11/05/2014と表示されているため、どこかで正しく機能していません。
各テーブルのIDは次のとおりです。
Customers.UniqueID and Transheaders.AccountID
ご協力いただきありがとうございます。
inserted
およびdeleted
疑似テーブルを使用して、列がトリガーの影響を受けた行を見つけ、2番目のテーブルの関連する行のみを更新する必要があります。
CREATE TRIGGER trg_LastSaleDate ON dbo.Transheaders
AFTER UPDATE
AS
IF UPDATE(TradingDate)
BEGIN
UPDATE c
SET ZLastSale = i.TradingDate
FROM dbo.Customers AS c
JOIN inserted AS i
ON i.CustomerID = c.CustomerID -- use the appropriate column for joining
JOIN deleted AS d
ON i.TransheadersID = d.TransheadersID
AND ( i.TradingDate <> d.TradingDate
OR d.TradingDate IS NULL
) ;
END ;