Триггер для обновления данных в другой БД - PullRequest
3 голосов
/ 19 мая 2010

У меня есть следующая схема:

База данных: тест.Таблица: per_login_user, Поле: имя пользователя (PK), пароль

База данных: wavinet.Таблица: login_user, Поле: имя пользователя (PK), пароль

Я хочу создать триггер.Всякий раз, когда поле password в таблице per_login_user в базе данных test обновляется, то же значение будет скопировано в поле password в таблице login_user в базе данных wavinet

У меня есть поле поискаGoogle и найти это решение: http://forums.devshed.com/ms-sql-development-95/use-trigger-to-update-data-in-another-db-149985.html

Но, когда я запускаю этот запрос:

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

сообщение об ошибке возврата запроса:

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.

1 Ответ

3 голосов
/ 19 мая 2010

Вы обновляете login_user, но ваше предложение FROM не содержит login_user. Это именно то, что на самом деле говорится в сообщении об ошибке. Если вы хотите обновить таблицу, любую таблицу и оператор UPDATE использует предложение FROM, то обновляемая таблица должна присутствовать в предложении 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

Я не уверен, чего вы хотите достичь с помощью JOIN в псевдотабле DELETED или с вашим странным предложением WHERE. Похоже, вы игнорируете тривиальный случай, когда пользователь A и пользователь B имеют одинаковый пароль, и когда пользователь A меняет свой пароль, ваш код также меняет пароль пользователя B ...

Что касается простого факта хранения пароля в открытом виде в базе данных: очень плохая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...