Sql server 触发以更新另一个数据库中的数据
我有以下模式: 数据库:test。 表:每个登录用户,字段:用户名(PK),密码 数据库:wavinet。 表:登录用户,字段:用户名(PK),密码 我想做的是创建一个触发器。每当数据库Sql server 触发以更新另一个数据库中的数据,sql-server,triggers,Sql Server,Triggers,我有以下模式: 数据库:test。 表:每个登录用户,字段:用户名(PK),密码 数据库:wavinet。 表:登录用户,字段:用户名(PK),密码 我想做的是创建一个触发器。每当数据库test中的表每个登录用户上的密码字段更新时,相同的值将复制到数据库wavinet中的表登录用户中的字段密码 我已通过谷歌搜索并找到此解决方案: 但是,当我运行此查询时: CREATE TRIGGER trgPasswordUpdater ON dbo.per_login_user FOR UPDATE AS U
test
中的表每个登录用户上的密码
字段更新时,相同的值将复制到数据库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
查询返回错误消息:
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.
您更新了login\u user,但FROM子句不包含login\u 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或奇怪的WHERE子句想要实现什么。您似乎忽略了用户A和用户B都拥有相同密码的小案例,当用户A更改其密码时,您的代码也会更改用户B的密码
至于在数据库中清晰地存储密码这一简单事实:这是个糟糕的主意。谢谢你的回答。老实说,我不太懂T-SQL。我只是从该链接获取sql查询并尝试修改它。谢谢你的解释。当然,密码在编程语言方面是加密的。