-1

上記の質問にあるように、クエリに IF 句があります。ここで、IF 句の結果に基づいて UPDATE を実行したいと考えています。どうすればこれを行うことができますか?

これが私のコードです:

string cmdstr = "UPDATE itemsordered i " +
                "INNER JOIN" +
                    "(  SELECT itemsOrdered_quantity, itemsOrdered_ID,  " +
                            "CASE WHEN itemsOrdered_quantity = '" + quantityTxtBox.Text + "' THEN 'EQUAL' " +
                                 "WHEN itemsOrdered_quantity < '" + quantityTxtBox.Text + "' THEN 'LESS' " +
                                 "WHEN itemsOrdered_quantity > '" + quantityTxtBox.Text + "' THEN 'MORE'  " +
                        "END AS r " +
                        "FROM itemsordered " +
                    ") res ON i.itemsOrdered_ID = res.itemsOrdered_ID " +
               "INNER JOIN stocksdb s ON s.stock_ID = i.stock_ID " +
               "IF (res.r = 'EQUAL') " +
               "BEGIN " +
               "SET s.stock_quantity = (s.stock_quantity + i.itemsOrdered_quantity), " +
                   "s.stock_dateUpdated = '" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "', " +
                   "i.itemsOrdered_status = 'RECEIVED', " +
                   "i.itemsOrdered_dateReceived = '" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "' " +
                   "WHERE i.itemsOrdered_ID = '" + idTxtBox.Text + "' " +
               "END " +
               "IF (res.r = 'LESS') " +
               "BEGIN " +
               "SET s.stock_quantity = (s.stock_quantity + i.itemsOrdered_quantity), " +
                   "s.stock_dateUpdated = '" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "', " +
                   "i.itemsOrdered_quantity = (i.itemsOrdered_quantity - " + quantityTxtBox.Text + "), " +
                   "i.itemsOrdered_dateReceived = '" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "' " +
                   "WHERE i.itemsOrdered_ID = '" + idTxtBox.Text + "' " +
               "END";
cmd = new MySqlCommand(cmdstr, db.mycon);
cmd.ExecuteNonQuery();

MessageBox.Show("ITEM RESTOCKED!");

でエラーが返され、最初の句cmd.ExecuteNonQuery()の近くにエラーがあると表示されます。IF

4

2 に答える 2

2

の代わりに式IF ... BEGINを使用しCASEます。を削除して、句BEGIN ... IFを 1 つだけにします。SET何かのようなもの:

SET s.stock_quantity = CASE 
                         WHEN res.r = 'EQUAL' THEN s.stock_quantity + i.itemsOrdered_quantity
                         ELSE ...
                       END,
   s.stock_dateUpdated = CASE 
                           WHEN res.r = 'EQUAL' THEN ...
                           ELSE ...
                         END,
   ....
...
于 2013-01-10T14:05:48.750 に答える
2

ブロックをIF取り出して、2 つの異なる SQL ステートメントを作成します。

各クエリの句に異なるIF基準を入れます。WHERE

于 2013-01-10T14:06:02.547 に答える