2010-05-19 6 views
3

J'ai le schéma suivant:Déclencheur pour mettre à jour les données dans un autre DB

Base de données: test. Table: per_login_user, champ: nom d'utilisateur (PK), mot de passe

Base de données: wavinet. Table: login_user, Champ: nom d'utilisateur (PK), mot de passe

Ce que je veux faire est de créer un déclencheur. Chaque fois qu'un champ password sur la table per_login_user dans la base de données test sont mis à jour, la même valeur sera copiée sur le terrain password dans le tableau login_user dans la base wavinet

J'ai creux de recherche Google et trouver cette solution: http://forums.devshed.com/ms-sql-development-95/use-trigger-to-update-data-in-another-db-149985.html

Mais, quand Je lance cette requête:

CREATE TRIGGER trgPasswordUpdater ON dbo.per_login_user 
FOR UPDATE 
AS 
UPDATE wavinet.dbo.login_user 
SET  password = I.password 
FROM inserted I 
INNER JOIN 
    deleted D 
ON I.username = D.username 
WHERE wavinet.dbo.login_wavinet.password = D.password 

le message d'erreur de retour de la requête:

Msg 107, Level 16, State 3, Procedure trgPasswordUpdater, Line 4 
The column prefix 'wavinet.dbo.login_wavinet' does not match with a table name or alias name used in the query. 

Répondre

3

Vous mettez à jour login_user, mais votre clause FROM ne contient pas login_user. C'est exactement ce que le message d'erreur dit réellement. Si vous souhaitez mettre à jour une table, une table, et l'instruction UPDATE utilise une clause FROM, la table mise à jour doit être présent dans la clause FROM:

UPDATE wavinet.dbo.login_user 
SET  password = I.password 
FROM wavinet.dbo.login_user 
JOIN inserted I ON wavinet.dbo.login_wavinet.username = I.username 

Je ne sais pas ce que vous voulez atteindre avec le JOIN sur la pseudo-table DELETED, ni avec votre étrange clause WHERE. Vous semblez ignorer le cas trivial de l'utilisateur A et de l'utilisateur B ayant tous les deux le même mot de passe et lorsque l'utilisateur A change de mot de passe, votre code change également le mot de passe de l'utilisateur ...

Pour le simple fait de stocker le mot de passe en clair dans la base de données: très mauvaise idée.

+0

Merci pour la réponse. Honnêtement, je ne comprends pas vraiment T-SQL. Je viens d'obtenir la requête SQL à partir de ce lien et essayer de le modifier. Merci pour l'explication. Et bien sûr, le mot de passe est crypté côté langage de programmation. – Permana

Questions connexes