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
Post a Comment