Как добавить только новую строку из одной таблицы в другую таблицу в SQL - PullRequest
0 голосов
/ 26 сентября 2018

Я использую Linked Server в SQL Server, который подключен к базе данных hana.Я хочу импортировать одну таблицу из базы данных HANA и сделать копию в SQL.Я сделал импортирующую часть.Теперь проблема в том, что я хочу сделать запрос, который выбирает единственную строку или вставить только строку в SQL, которая не существует или новая.Но мой запрос выдает ошибку нарушения первичного ключа, что означает повторную вставку всех данных.Вот мой запрос:

insert into OACT ( AcctCode,AcctName,CurrTotal,FatherNum,SysTotal,CreateDate,UpdateDate,ActId,FormatCode)
select tab2.AcctCode,tab2.AcctName,tab2.CurrTotal, tab2.FatherNum,tab2.SysTotal,tab2.CreateDate,tab2.UpdateDate,tab2.ActId,tab2.FormatCode
from HanaSql8.."TRAININGDB"."OACT" tab2
Where NOT EXISTS (
    Select tab1.AcctCode,tab1.AcctName,tab1.CurrTotal, tab1.FatherNum,tab1.SysTotal,tab1.CreateDate,tab1.UpdateDate,tab1.ActId,tab1.FormatCode
    from OACT  tab1
    where tab1.AcctCode=tab2.AcctCode
);

1 Ответ

0 голосов
/ 26 сентября 2018

Ваш код должен работать без проблем, если первичный ключ в целевой таблице определен в столбце AcctCode

В EXISTS () или NOT EXISTS () вам не нужно выбирать с именами столбцов, этотолько логическая проверка, поэтому вы можете изменить ее следующим образом

insert into OACT ( 
    AcctCode,AcctName,CurrTotal,
    FatherNum,SysTotal,CreateDate
    ,UpdateDate,ActId,FormatCode
    )
select 
    tab2.AcctCode,tab2.AcctName,tab2.CurrTotal, 
    tab2.FatherNum,tab2.SysTotal,tab2.CreateDate,
    tab2.UpdateDate,tab2.ActId,tab2.FormatCode
from HanaSql8.."TRAININGDB"."OACT" tab2
Where NOT EXISTS (
    Select *
    from OACT  tab1
    where tab1.AcctCode=tab2.AcctCode
);

Мы можем протестировать предложение LEFT JOIN в качестве альтернативы NOT EXISTS ()

Вот запрос

insert into OACT ( 
    AcctCode,AcctName
)
select 
    tab2.AcctCode,tab2.AcctName
from HanaSql8.."TRAININGDB"."OACT" tab2
left join OACT tab1
    on tab1.AcctCode=tab2.AcctCode
where tab1.AcctCode is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...