sql server - While 'CASE WHEN' update, other columns become null -


i using user defined table type in tmy database update several columns via datatable.

so, wrote following stored procedure , it's working good. while updating respective columns, make other columns null.

my stored procudure:

alter procedure [dbo].[updateabcditemsbyvendorprice]       @tblitemupdate abcditemsupdate readonly begin     set nocount on;      merge abcditems abcdtable     using @tblitemupdate temptable     on abcdtable.itempartnumber = temptable.itempartnumber     when matched     update set         abcdtable.inpostprice = case when temptable.vendorname = 'inpost' temptable.price end,         abcdtable.inpostupdateddate = case when temptable.vendorname = 'inpost' getutcdate() end,         abcdtable.inpostabsoluteitem = case when temptable.vendorname = 'inpost' 0 end,          abcdtable.hrcprice = case when temptable.vendorname = 'hrc' temptable.price end,         abcdtable.hrcupdateddate = case when temptable.vendorname = 'hrc' getutcdate() end,         abcdtable.hrcabsoluteitem = case when temptable.vendorname = 'hrc' 0 end,          abcdtable.annecyprice = case when temptable.vendorname = 'annecy' temptable.price end,         abcdtable.annecyupdateddate = case when temptable.vendorname = 'annecy' getutcdate() end,         abcdtable.annecyabsoluteitem = case when temptable.vendorname = 'annecy' 0 end,          abcdtable.sydneyprice = case when temptable.vendorname = 'sydney' temptable.price end,         abcdtable.sydneyupdateddate = case when temptable.vendorname = 'sydney' getutcdate() end,         abcdtable.sydneyabsoluteitem = case when temptable.vendorname = 'sydney' 0 end; end 

my table before executing query 'inpost':

inpostprice    hrcprice    ... 0              0           ... 

my table after executing query 'inpost':

inpostprice    hrcprice    ... 213.57         null        ... 

why hrcprice become null? sorry bad english. me in this!

you assigning null because have no else in case. assume instead want use old value:

update set     abcdtable.inpostprice = case when temptable.vendorname = 'inpost'                              temptable.price                               else abcdtable.inpostprice end,    ..... 

from documentation:

else else_result_expression: expression returned if no comparison operation evaluates true. if argument omitted , no comparison operation evaluates true, case returns null


Comments

Popular posts from this blog

IF statement in MySQL trigger -

c++ - What does MSC in "// appease MSC" comments mean? -

javascript - Blogger related post gadget image Resize s72-c [ Need Expert Help ] -