2012-03-14 53 views
0

我可以用更好的方式重写这些语句,使用一个更新语句或其中的某个案例,或者我只是将它们保留下来并包装在一个事务中?我可以用更好的方式重写这些语句吗?

DECLARE @currentFailedPassCount int = 
     (SELECT FailedPasswordAttemptCount FROM Users WHERE [email protected]); 
UPDATE Users 
     SET FailedPasswordAnswerAttemptCount=FailedPasswordAnswerAttemptCount+1 
     WHERE [email protected]; 
IF(@currentFailedPassCount=5) 
     UPDATE Users 
     SET IsLockedOut=1 
     WHERE [email protected]; 

回答

4

事情是这样的:

UPDATE Users 
SET FailedPasswordAnswerAttemptCount=FailedPasswordAnswerAttemptCount+1, 
    IsLockedOut = CASE 
        WHEN FailedPasswordAnswerAttemptCount >= 4 THEN 1 
        ELSE 0 
        END 
WHERE [email protected]; 

我不认为它的内容很好(个人喜好),但它是一个单独的语句。

+0

您可以使用2008'FailedPasswordAnswerAttemptCount + = 1'。 – 2012-03-14 19:26:43

0

尝试:

DECLARE @currentFailedPassCount int = (SELECT FailedPasswordAttemptCount FROM Users  WHERE [email protected]); 

IF(@currentFailedPassCount=4) 
BEGIN 
    UPDATE Users 
    SET FailedPasswordAnswerAttemptCount=5, IsLockedOut=1 
    WHERE [email protected]; 
END 
ELSE 
BEGIN 
    UPDATE Users 
    SET FailedPasswordAnswerAttemptCount=FailedPasswordAnswerAttemptCount+1 
    WHERE [email protected]; 
END 
0
UPDATE Users 
SET 
    FailedPasswordAnswerAttemptCount=FailedPasswordAnswerAttemptCount + 1, 
    IsLockedOut=case 
     when FailedPasswordAnswerAttemptCount = 4 then 1 
     else IsLockedOut 
    end 
WHERE [email protected] 
相关问题