0

我在我的 aspx 页面中得到了以下 sql 查询来更新我在 phpmyadmin 中的数据库。我的软件是visual web developer 2010。

  cmd = connection.CreateCommand();
            cmd.CommandText = "UPDATE (userscore) SET score = @score WHERE username = @username";
            cmd.Parameters.AddWithValue("@username", username);
            cmd.Parameters.AddWithValue("@score", userscore);
            var numRowsAffected = cmd.ExecuteNonQuery();
            if (numRowsAffected == 0)
            {
                cmd.CommandText = "INSERT INTO userscore (username, score)VALUES(@username,   @score)";
                cmd.ExecuteNonQuery();
            }

当特定的用户名不在数据库中时,此查询会在数据库中添加一个用户名 plus is score。这就是我想要的。但是,例如,当用户名 admin 在数据库中的得分为 -1 时(在我的应用程序中,您可以投票 +1 或 -1)并且他又获得了 +1 的投票,我想存储这些值的总和(在这个case -1 plus +1 = 0)在数据库中作为新分数,并删除旧值,在本例中为-1。

4

1 回答 1

0

我只需将您的“upsert”代码包装到存储过程中,并传递用户 ID 和分数增量/减量。

您当前的代码不会更新分数,而只是用您传入的任何内容覆盖它

create proc SetUserScore
@UserName nvarchar(100),
@ScoreChange int
AS
BEGIN
    IF EXISTS(SELECT 1 FROM userscore WHERE username = @UserName)
    BEGIN
      UPDATE userscore 
      SET score = score + @ScoreChange
      WHERE username = @UserName
    END
    ELSE
    BEGIN
      INSERT INTO userscore (username, score)VALUES(@username,   @score)
    END

END
于 2013-03-17T08:10:09.917 回答