2008-10-29 9 views
0

deux tables:Comment mettre à jour une colonne de table en fonction d'une condition?

StoreInfo: 
UserId uniqueidentifier 
StoreNo nvarchar 
UserName nvarchar 
Password nvarchar 

UserInfo: 
UserId uniqueidentifier 
UserName nvarchar 
Password nvarchar 

le UserId sur StoreInfo est actuellement nulle. Comment puis-je mettre à jour l'ID utilisateur de StoreInfo avec l'ID utilisateur de UserInfo basé sur le nom d'utilisateur et le mot de passe de StoreInfo correspond au nom d'utilisateur et au mot de passe de UserInfo. Voici la requête que j'ai écrite qui met à jour le UserId entier dans StoreInfo avec le premier UserId de UserInfo, donc je sais que c'est faux.

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

L'optimisation prématurée est la racine de tout mal dans la programmation. –

Répondre

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 

Cela mettra à jour toutes les lignes de la table où UserId n'est pas réglé. Construire la clause where si vous voulez seulement mettre à jour les lignes sélectionnées. (Je ne l'ai pas testé, alors faites attention pour les fautes de frappe!)

3

La mise à jour se présente comme suit

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

La façon la plus efficace est la syntaxe UPDATE ... FROM, par exemple

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

Merci. Votre solution est beaucoup plus propre à comprendre. – Jack

Questions connexes