There are three tables
Create Table InputItems ( ItemID int Primary key, Name nvarchar(250)) Insert into InputItems values (1, 'Raw1') Insert into InputItems values (2, 'Raw2') Insert into InputItems values (3, 'Raw3') select * from InputItems Create Table TestItems ( ItemNumber int Primary key, ItemName nvarchar(250), ItemID int) Insert into TestItems values (111, 'Test1', 1) Insert into TestItems values(112, 'Test2', 2) Insert into TestItems values (113, 'Test3', 3) Insert into TestItems values (114, 'Raw1', 1) Insert into TestItems values (115, 'Raw2', 2) Insert into TestItems values (116, 'Raw', 3) select * from TestItems Create Table ResultItems ( ItemNumber int Primary key, Name nvarchar(250)) select * from ResultItems delete from ResultItems declare @Temp table (ItemNumber int, ItemID int) Insert into @Temp select t.ItemNumber, t.ItemID from InputItems i inner join TestItems t on i.ItemID = t.ItemID and i.Name = t.ItemName --found those not match one
Insert into ResultItems Select t.ItemNumber, t.ItemName from InputItems i inner join TestItems t on i.ItemID = t.ItemID and i.Name <> t.ItemName
-- delete those items which ItemID already matched
Delete from ResultItems where ItemNumber in (select it.ItemNumber from TestItems it inner join @Temp t on it.ItemID = t.ItemID) -- insert those matched ones
Insert into ResultItems select distinct t.ItemNumber, t.ItemName from InputItems i inner join TestItems t on i.ItemID = t.ItemID and i.Name = t.ItemName select * from ResultItems
from InputItems we want to get ResultItems table which by return all items in items table match with InputItems'ItemID and (Name matched or Name cannot find from Items table)
(114, Raw1) (115, Raw2) (113, Test3) (116, Raw)
The above bold lines are one of solution. We wonder is there simpler one than this one.
Thx!
JaneC