2014-01-27 49 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