0

phpmyadmin でデータベースを更新するために、aspx ページで次の SQL クエリを取得しました。私のソフトウェアはビジュアル Web デベロッパー 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();
            }

このクエリは、特定のユーザー名がまだデータベースにない場合に、データベースにユーザー名とスコアを追加します。それが私が欲しいものです。しかし、たとえば、ユーザー名 admin がスコア -1 でデータベースにあり (私のアプリケーションでは +1 または -1 に投票できます)、彼が別の +1 の投票を取得した場合、値の合計を保存したいと思います (このケース -1 プラス +1 = 0) を新しいスコアとしてデータベースに格納し、古い値 (この例では -1) を削除します。

4

1 に答える 1

0

「アップサート」コードをストアド プロシージャにラップし、ユーザー 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 に答える