2017-06-15 3 views
1

J'ai un problème avec mon déclencheur SQL dans Visual Studio 2010. J'ai 2 tables et j'aimerais effectuer une opération avec une table sur une autre.Mise à jour du déclencheur dans Visual Studio 2010

est ici le code:

ALTER TRIGGER update_costs 
ON employees 
AFTER UPDATE 
AS 
BEGIN 
    UPDATE employees 
    SET salary = 0 
    WHERE NewSalary.ID=employees.ID 
    PRINT 'Salary is now set on 0' 

END 

Je voudrais que cela fonctionne comme ça:

  • J'installe le salaire dans le tableau NewSalary sur 0
  • Salaire dans le tableau des employés est modifiée à 0

L'erreur que j'obtiens est

« identifiant plusieurs parties « NewSalary.ID » ne pouvait pas être lié »

Je suppose qu'il n'y a pas « jointure », mais je ne sais pas comment l'utiliser

+0

Vous avez raison de demander une jointure, mais vous devez également utiliser la table "hidden" * inserted *, qui contiendra l'ID d'enregistrement du nouvel enregistrement entrant dans la table des employés. –

Répondre

0

Essayez changer le ON Employees en ON NewSalary.

Il ne peut pas trouver NewSalary.ID car la table NewSalary n'est pas référencée.

Quand je vais avoir des problèmes avec SQL que je leur parle habituellement pour comparer la logique

Vieux:
Après chaque mise à jour aux employés, les employés de mise à jour et définir salaire = 0 où NewSalary.ID = employees.ID . Après chaque mise à jour de NewSalary, mettez à jour les employés et définissez salary = 0 où NewSalary.ID = employees.ID.

Vous voyez la différence?

+0

employés est la table sur laquelle le déclencheur est activé, pas la table qui doit être jointe. Au moins c'est comme ça que j'ai lu la question. –

+0

Notez comment le demandeur ** veut que le déclencheur fonctionne. L'action initiale est sur la table NewSalary. Comme sur un résultat à cette mise à jour sur la table NewSalary - quelque chose d'autre devrait arriver à la table Employés – mattbuell

+0

Vous avez raison. Sauf que c'est mal conçu pour avoir le salaire enregistré dans les deux endroits. Quelque chose est éteint. –