Je veux pouvoir mettre à jour une date déposée dans une table lorsqu'une autre table est mise à jour. J'ai les deux tables suivantes: Transdetails
, Customers
.
Dans la table Customers
j'ai un champ appelé ZLastDateOfSale
. Je veux ce champ mis à jour avec la date actuelle lorsque Transdetails.TradingDate
est mis à jour par client.
Pouvez-vous s'il vous plaît aidez-moi à créer ce déclencheur?
Mon exemple est ci-dessous:
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
Exemple mis à jour le 11/05/2014 :
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 ;
Bonjour,
Merci beaucoup pour votre contribution et votre réponse. J'ai changé votre exemple fournis, dirigé le script et cela a réussi, cependant, ce qu'il a fait était de mettre à jour la date de Zlastsale sur tous les clients de la date d'aujourd'hui. Ce champ doit être vide et seule la mise à jour ne passe à partir de maintenant lorsque la gâchette incendie. Ce champ ne doit être mis à jour que sur une vente d'un client.
De plus, lorsque j'ai testé la saisie d'une nouvelle transaction avec une date du 30/05/2014, il n'a pas mis à jour le champ ZlastSale requis. Il est affiché comme 11/05/2014 alors quelque chose ne fonctionne pas juste quelque part.
Mes identifiants pour chaque table sont:
Customers.UniqueID and Transheaders.AccountID
Merci encore pour votre aide.
Vous devriez utiliser les tables inserted
et deleted
pseudo pour connaître les lignes pour lesquelles la colonne a été affectée par la gâchette - puis mettez à jour uniquement les lignes correspondantes dans la deuxième table:
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 ;