触发更新另一个数据库中的数据

时间:2010-05-19 02:26:58

标签: sql-server triggers

我有以下架构:

数据库:测试。     表:per_login_user,字段:用户名(PK),密码

数据库:wavinet。     表:login_user,字段:用户名(PK),密码

我想要做的是创建一个触发器。每当数据库password中的表per_login_user上的test字段更新时,相同的值将被复制到数据库{{1}中的表password中的字段login_user }}

我通过Google搜索并找到了这个解决方案:http://forums.devshed.com/ms-sql-development-95/use-trigger-to-update-data-in-another-db-149985.html

但是,当我运行此查询时:

wavinet

查询返回错误消息:

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

1 个答案:

答案 0 :(得分:3)

您更新了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

我不确定你想用DELETED伪表上的JOIN实现什么,也不确定你的奇怪WHERE子句。您似乎忽略了用户A和用户B都具有相同密码的简单情况,并且当用户A更改其密码时,您的代码也将更改用户B的密码...

关于在数据库中清除密码的简单事实:非常糟糕的主意。