2010-05-19 60 views
3

我有以下架構:觸發更新另一個數據庫中的數據

數據庫:測試。 表:per_login_user,字段:用戶名(PK),密碼

數據庫:wavinet。 表:login_user,字段:用戶名(PK),密碼

我想要做的是創建一個觸發器。每當數據庫test上表per_login_user一個password場得到更新,相同的值將被複制到現場passwordlogin_user數據庫wavinet

我有搜索槽谷歌和發現這個解決方案: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. 

回答

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的密碼以及...

至於存儲密碼的簡單事實在數據庫中清楚:非常糟糕的想法。

+0

感謝您的回答。老實說,我並不是很瞭解T-SQL。我只是從該鏈接獲取sql查詢並嘗試修改它。感謝您的解釋。當然密碼在編程語言方面是加密的。 – Permana 2010-05-19 04:30:30

相關問題