Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 触发以更新另一个数据库中的数据_Sql Server_Triggers - Fatal编程技术网

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

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。 表:每个登录用户,字段:用户名(PK),密码

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

我想做的是创建一个触发器。每当数据库
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查询并尝试修改它。谢谢你的解释。当然,密码在编程语言方面是加密的。