SQL If特定用户的语句

时间:2017-12-24 19:49:20

标签: sql sql-server

所以我有2个用户,一个叫做admin,另一个叫admin2。

我已经编写了一个SQL查询,其中我希望增加特定帐户的成就,在我的情况下仅针对admin,但尽管如此,用户admin2的相同成就也是影响。我做错了什么?

DECLARE @Achievement1 INT

SELECT @Achievement1 = Achievement1
FROM [dbo].[Achievement]
WHERE [dbo].[Achievement].UserID = (SELECT [AccountID]
                                    FROM [dbo].[Account]
                                    WHERE [Username] = 'Admin')

IF (@Achievement1 < 100)
    UPDATE [dbo].[Achievement]
    SET [Achievement1] += 2
ELSE
    UPDATE [dbo].[Achievement]
    SET [Achievement1] += 0

2 个答案:

答案 0 :(得分:6)

当满足条件时,您的代码正在更新Achievement中的所有行。它不仅仅是更新匹配的行。

你的逻辑很复杂。我想你可以这样做:

UPDATE a
    SET Achievement1 += 2
    FROM dbo.Achievement a
    WHERE a.Achievement1 < 100 AND
          a.UserId = (SELECT ac.AccountId
                      FROM dbo.Account ac
                      WHERE ac.UserName = 'admin' 
                     );

注意:在一个表中将UserId与另一个表中的AccountId匹配是非常令人困惑的。您确定比较不应该是用户ID还是帐户ID?

答案 1 :(得分:2)

不需要所有这些,您只需使用以下连接进行更新:

UPDATE a1
SET a1.[Achievement1] = CASE WHEN a1.Achievement1 < 100 THEN a1.[Achievement1] + 2  
                          ELSE a1.[Achievement1] END
FROM [dbo].[Achievement] AS a1
INNER JOIN [dbo].[Account] AS a2 ON a1.UserID = a2.[AccountID]
WHERE a2.UserName = 'admin';