Вход | Регистрация
 

MS SQL. INSERT в таблицу, игнорируя ошибки дублирования ключей

MS SQL. INSERT в таблицу, игнорируя ошибки дублирования ключей
Я
   SeiOkami
 
14.03.19 - 15:29
Добрый день

Имеем копию базы. В ней есть большие таблицы (например, регистр накопления с 3 млрд строк или документ с 1.5 млрд).
Имеется дополнительно специальная копия, которая актуализируется раз в неделю.

Хочется скриптом периодически переливать новые данные из этой "основной" копии в собственную. Переливать только нужные таблицы. Чтобы не производить полное обновление базы.

Если переливать скриптом SQL данные с указанием периода, то могут произойти ситуации, когда в таблице документов уже есть такая ссылка. В такой ситуации скрипт INSERT просто упадёт в ошибку.
Есть ли возможность указать INSERT, который будет игнорировать ошибки при вставке. Т.е., если там уже есть строка с данными по этому ключу, то наплевать - идём дальше переносить данные.

Понятно, что таким образом будет не точная копия и где-то могут быть пробелы, но на это пойти готовы.
 
 
   trad
 
1 - 14.03.19 - 15:54
отфильтровать источник разве нельзя?
   trad
 
2 - 14.03.19 - 15:56
insert into t1
from t2
left join t1 on t1.key = t2.key
where t1.key is null
   Вафель
 
3 - 14.03.19 - 15:56
   trad
 
4 - 14.03.19 - 15:58
select * перед from забыл
   Вафель
 
5 - 14.03.19 - 15:59
(4) так то вначале нужно в t2 вставить
   SeiOkami
 
6 - 14.03.19 - 16:12
(2), это будет долговато, хотелось бы без соединений
   trad
 
7 - 14.03.19 - 16:16
(6) предлагаю протестить и замерить и не торопиться с выводами
   SeiOkami
 
8 - 14.03.19 - 16:17
(7). Смотрели. Таблицы в несколько терабайт, так что там всё больно
   SeiOkami
 
9 - 14.03.19 - 16:52
(3), о, спасибо большое. MERGE работает довольно шустро
   Сияющий в темноте
 
10 - 14.03.19 - 17:17
А insert or update?
 
 Рекламное место пустует
   SeiOkami
 
11 - 15.03.19 - 13:31
(10), не знаю такого в MS SQL
   Сияющий в темноте
 
12 - 15.03.19 - 13:40
В общем-то,в mssql действительно из коробки такого нет
соответственно,предлагается писать процедуры
http://qaru.site/questions/15291/solutions-for-insert-or-update-on-sql-server
соответственно,в postgre немного по-другому
http://www.postgresqltutorial.com/postgresql-upsert/
но тоже через одно место.

p.s.просто,я даже не подумал,что такую простую и полезную инструкцию не реализовали.
   Ёпрст
 
13 - 15.03.19 - 14:00
(12) в sqllite есть

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует