2013-01-10 75 views
-1

如上面的問題所述,我的查詢中有一個IF子句。現在我想根據IF子句的結果進行更新。任何想法我可以做到這一點?如何根據查詢中的IF語句的結果進行更新?

這裏是我的代碼:

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子句附近的錯誤。

+0

你能否提供完整的錯誤信息!!! –

+0

開始後如果().......? –

+0

我做到了。它說第一個IF條款附近有一個錯誤。你期待什麼樣的錯誤信息? –

回答

2

而不是IF ... BEGIN,使用CASE表達式。刪除BEGIN ... IF並且只有一個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, 
    .... 
... 
+0

這會工作,但你也可以打破更新到2不同的更新查詢與不同的WHERE子句。我想這將是個人喜好。 – Tom

+0

不會更新的查詢有更長的代碼? –

+0

@Tom是的,你是對的。不明白OP在做什麼,所以我建議這個解決方案。 –

2

我會採取IF塊,並有2個不同的SQL語句。

將不同的IF條件放在每個查詢的WHERE子句中。