2014-01-27 54 views
0
update PD set quantity = 
    (
    case 
     when ((quantity - @transferqnty) <= 0) then attrited = 'true' 
     else (quantity - @transeferqnty) 
    end 
) 
from K_RT_PurchaseDet as PD 
inner join K_RT_Productdetails as PS on PD.product = PS.sno 
where PS.productname = @Purchaseid 

我想,當數量變爲零,我寫這樣的更新的列名,但我得到在SQL服務器中更新連接和案例條件?

「附近有語法錯誤‘=’。」

什麼問題在此請幫助我....

+1

在T-SQL中,'CASE'是** **表達 - 它可以**返回一個值** - 但它** CAN NOT **執行其自身內部的代碼!它**不像** switch {case。 ..}'聲明在C#或VB.NET –

回答

0

你不能有一個case語句內賦值操作,只能返回它可以在你上面的代碼被分配到quantity值。所以更換attrited = 'true'你要分配給數量的任何值。它將如下所示。

update PD set quantity = 
    (
    case 
     when ((quantity - @transferqnty) <= 0) then quantity 
     else (quantity - @transeferqnty) 
    end 
) 
from K_RT_PurchaseDet as PD 
inner join K_RT_Productdetails as PS on PD.product = PS.sno 
where PS.productname = @Purchaseid 

在上述我正在maintaning爲數量相同的值。

如果您正在尋找分配根據病情的不同列,你不能動態地更改列名。但您可以嘗試此LINK中提到的解決方案。

+0

,但我想更新行時量爲零我該怎麼寫呢? – santhosha

+0

您可以檢查任何數量的條件內情況下,使用多個WHEN。在我上面的查詢將分配(數量 - @transeferqnty)僅當((數量 - @transferqnty)<= 0)滿足其他行將具有相同的值。只需根據您的要求更新查詢。 – Naveen

+0

您是否希望根據條件分配多列?如果是這樣,我已經給你一個鏈接。這就是你必須這樣做的方式,如果你發現任何困難,歡迎你。 – Naveen