How to prevent update to category only by part id when it be blank or NULL on inputdata table ?

ahmed salah 3,216 Reputation points
2020-12-16T08:05:25.957+00:00

I work on sql server 2012 I face issue I need to do update data found on table #DataUpdated based on part id exist on table #inputdata .

my issue on category on inputdata will update #dataupdated table when it have value only and not equal NULL
OR Blank .
so I need to update full row by parts id .

my issue i can't avoid update to data inputdata by partid where category on input data is null or blank
so how to do that

update d set d.category=i.category  from #DataUpdated d
inner join #inputdata i on i.partid=d.partid

create table #inputdata
(
PartId  int,
category nvarchar(50),
NameGeneration  nvarchar(50)
)
insert into #inputdata(PartId,category,NameGeneration)
values
(2020,NULL,'v5070'),
(2030, '','v5080'),
(2050,'Iron2','v5090'),
(2090,'Plaster2','v8000')

create table #DataUpdated
(
PartId  int,
category nvarchar(50),
NameGeneration  nvarchar(50)
)
insert into #DataUpdated(PartId,category,NameGeneration)
values
(2020,'Plastic','v5050'),
(2030,'Alomental','v5050'),
(2050,'Iron','v5050'),
(2090,'Plaster','v9000')



result expected

SELECT * FROM #DataUpdated
PartId category NameGeneration
2020 Plastic v5070
2030 Alomental v5080
2050 Iron2 v5090
2090 Plaster2 v8000

SQL Server
SQL Server
A family of Microsoft relational database management and analysis systems for e-commerce, line-of-business, and data warehousing solutions.
12,690 questions
Transact-SQL
Transact-SQL
A Microsoft extension to the ANSI SQL language that includes procedural programming, local variables, and various support functions.
4,552 questions
0 comments No comments
{count} votes

Accepted answer
  1. Viorel 112.1K Reputation points
    2020-12-16T10:40:06.467+00:00

    This variation seems to work too:

    update u
    set 
        u.category = isnull(nullif(i.category, ''), u.category), -- or: u.category = iif(i.category <> '', i.category, u.category),
        u.NameGeneration = i.NameGeneration
    from #inputdata i 
    inner join #DataUpdated u on u.PartId=i.PartId
    
    0 comments No comments

5 additional answers

Sort by: Most helpful
  1. EchoLiu-MSFT 14,571 Reputation points
    2020-12-16T09:41:33.65+00:00
      update d 
      set d.category=case when (i.category <>'' or i.category <>null) then i.category else d.category end,
          d.NameGeneration=i.NameGeneration
      from #DataUpdated d
      inner join #inputdata i 
      on i.partid=d.partid 
    

    Echo

    0 comments No comments