Вставить новые записи в таблицу с помощью оператора If / Else - PullRequest
1 голос
/ 28 марта 2019

У меня есть две таблицы SQL Server, в которые мне нужно добавить записи из одной таблицы в другую.Если уникальный идентификатор уже существует в целевой таблице, обновите запись до данных, поступающих из исходной таблицы. Если уникальный идентификатор не существует, вставьте всю новую запись в целевую таблицу.

Iпохоже, что начальная часть работала там, где я обновляю записи в целевой таблице, но та часть, где я вставляю новые записи, кажется, не работает.

if exists (
   select 1
   from SCM_Top_Up_Operational O
   join SCM_Top_Up_Rolling R ON O.String = R.string
)
begin

   update O
   set    O.Date_Added = R.Date_Added,
          O.Real_Exfact = R.Real_Exfact,
          O.Excess_Top_Up = R.Excess_Top_Up 
   from  SCM_Top_Up_Operational O 
   join  SCM_Top_Up_Rolling R on O.String = R.String
   where O.String = R.string and R.date_added > O.date_added

end

else 

begin
   insert into SCM_Top_Up_Operational (String,Date_Added,Real_Exfact,Article_ID,Excess_Top_Up,Plant)
   select String,Date_Added,Real_Exfact,Article_ID,Excess_Top_Up,Plant
   from SCM_Top_Up_Rolling
end

1 Ответ

2 голосов
/ 28 марта 2019

Если я следил за вами правильно, вы сможете решить эту проблему с помощью одного запроса SQL, используя SQL Server MERGE синтаксис , доступный с SQL Server 2008.

Из документации:

Запускает операции вставки, обновления или удаления в целевой таблице из результатов объединения с исходной таблицей. Например, синхронизируйте две таблицы, вставляя, обновляя или удаляя строки в одной таблице на основе различий, обнаруженных в другой таблице.

Рассмотрим следующий запрос:

MERGE 
    SCM_Top_Up_Operational O 
    USING SCM_Top_Up_Rolling R ON (O.String = R.string)
WHEN MATCHED 
    THEN UPDATE SET 
        O.Date_Added    = R.Date_Added,
        O.Real_Exfact   = R.Real_Exfact,
        O.Excess_Top_Up = R.Excess_Top_Up 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT (  String,   Date_Added,   Real_Exfact,   Article_ID,   Excess_Top_Up,   Plant)
         VALUES (R.String, R.Date_Added, R.Real_Exfact, R.Article_ID, R.Excess_Top_Up, R.Plant)
...