2017-04-05 3 views
0

私のコードが機能しません。私はいくつかのことを試しましたが、ここからどこに行くのかは分かりません。次のクエリでnullから始まる値に追加します。私のコードを実行した後、スコア値はまだnullです。SQLクエリで「更新」と「結合」を併用してデータベースの値を増やす

AnswersデータベースとWeeklyPredictionsデータベースの両方には、追加の質問のためのいくつかの属性があります。このSQL NULL + 10 1.

var Q1 = ""; 
    var weeknumber = ""; 

    if (IsPost) 
    { 
     if (Request.Form["weeknumber"] != null) 
     { 
      weeknumber = Request.Form["weeknumber"]; 
     } 
     if (Request.Form["Question1"] != null) 
     { 
      string selectedAnswer = Request.Form["Question1"].ToString(); 
      Q1 = Request.Form["Question1"]; 
     } 


     var db = Database.Open("foo"); 

     var q1w = ("UPDATE t1 " + 
      "SET t1.weeklyScore = t1.weeklyScore + 10, t1.totalScore = t1.totalScore + 10 " + 
      "FROM dbo.Scores as t1 " + 
      "INNER JOIN dbo.WeeklyPredictions AS t2 " + 
      "ON t1.Id = t2.Id " + 
      "WHERE t2.Question1 = @0 " + 
      "AND t2.WeekNumber = @1"); 

db.Execute(q1w, Q1, weeknumber); 
+0

SQLの構文はOKのようですので、私の推測は変数の割り当てに問題があります。特定のQuestion1値とWeekNumber値を使用して、SSMSでSQLを手動で実行できますか?何が起こるのですか? – Aron

+0

こんにちは、私はSSMSを持っていない...多分私はそれをダウンロードします。私は、ユーザースコアにポイントを追加するために働くWeeklyPredictionsデータベースに値があることを知っています。それでも、スコアはnullです。私はデータベースの設計を見ることができ、テーブルの内容を見ることができます@Aron –

+0

SSMSを使用する必要はありません(ただし、作業は簡単だと思いますが)、ハードコードされた値でASPコードを実行できます。問題がどこにあるかを特定するだけです。 'weeknumber = Request.Form [" weeknumber "];'テーブルとまったく同じデータ型ですか?パディングされたスペースや文字はありますか? SQLステートメントには完全一致が必要です。私は確かに言うことができないので、そこにそれを投げてください。 @Aronに感謝します。 – Aron

答えて

2

最初の質問を使用してコードのちょうどsnippitは、私は、これがSQL Serverであると仮定すると、ISNULL(col, 0) + 10

https://technet.microsoft.com/en-us/library/ms191504(v=sql.105).aspx

+0

これは問題でした。私は "0 + 10"をハードコードし、データベースに10を保存しました。 'ISNULL'や' IFNULL'がどのように動作するかは分かりません。私は 'IFNULL(t1.weeklyScore、0))'と 'ISNULL(t1.weeklyScore、0))'を実行しようとしましたが、関数は認識されませんでした。参考までに、私のエラーは - ** 'System.Data.SqlClient.SqlException'型の例外はSystem.Data.dllで発生しましたが、ユーザーコードでは処理されませんでした。追加情報: 'IFNULL'は認識されている組み込み関数名ではありません** –

+0

@JulesMenaこのエラーを出した新しいコードを質問に投稿できますか? – artm

0

を使用するようにコードを変更し、まだNULLでしょうです

UPDATE s 
    SET weeklyScore = COALESCE(s.weeklyScore, 0) + 10, 
     totalScore = COALESCE(s.totalScore, 0) + 10 
FROM dbo.Scores s INNER JOIN 
    dbo.WeeklyPredictions wp 
    ON s.Id = wp.Id 
WHERE wp.Question1 = @0 AND wp.WeekNumber = @1; 
関連する問題