2008-10-29 68 views
0

兩個表:如何根據條件更新表格列?

StoreInfo: 
UserId uniqueidentifier 
StoreNo nvarchar 
UserName nvarchar 
Password nvarchar 

UserInfo: 
UserId uniqueidentifier 
UserName nvarchar 
Password nvarchar 

上StoreInfo的用戶ID目前爲空。我如何根據StoreInfo的UserName更新StoreInfo的UserId與UserInfo的UserId,並且密碼與UserInfo的UserName和Password匹配。

以下是我寫的查詢,它使用UserInfo中的第一個UserId更新StoreInfo中的整個UserId,因此我知道這是錯誤的。

declare @UserName nvarchar(255) 
declare @Password nvarchar(25) 
declare @UserId uniqueidentifier 

select @UserName = UserName, @Password = Password, @UserId = UserId 
from UserInfo 

select UserId, Password 
    from FranchiseInfo 
    where UserID = @UserName and Password = @Password 

update FranchiseInfo 
set UserI = @UserId 
+0

不成熟的優化是編程中所有邪惡的根源。 – 2009-10-27 09:39:35

回答

0
UPDATE StoreInfo 
set UserId = ui.UserId 
from StoreInfo si 
    inner join UserInfo ui 
    on ui.UserName = si.UserName 
    and ui.Password = si.Password 
where si.UserId is null 

這將更新在其中userid沒有設置表中所有行。如果您只想更新選定的行,請構建where子句。 (我沒有測試過這一點,所以看爲錯別字!)

3

的更新應該是這樣的

update storeinfo 
set userid = u.userid 
from userinfo u 
inner join storeinfo s on (s.username = u.username and s.password = u.password) 
where userid is null 
0

的最有效方法是UPDATE ... FROM語法,如

UPDATE StoreInfo 
SET 
    UserId = ui.UserId 
FROM 
    StoreInfo si 
    INNER JOIN UserInfo ui ON ui.UserName = si.UserName AND ui.Password = si.Password; 
+0

謝謝。您的解決方案要清楚得多。 – Jack 2008-10-29 20:50:20