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

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

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

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

Понятно, что таким образом будет не точная копия и где-то могут быть пробелы, но на это пойти готовы.
1 trad
 
14.03.19
15:54
отфильтровать источник разве нельзя?
2 trad
 
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
4 trad
 
14.03.19
15:58
select * перед from забыл
5 Вафель
 
14.03.19
15:59
(4) так то вначале нужно в t2 вставить
6 SeiOkami
 
14.03.19
16:12
(2), это будет долговато, хотелось бы без соединений
7 trad
 
14.03.19
16:16
(6) предлагаю протестить и замерить и не торопиться с выводами
8 SeiOkami
 
14.03.19
16:17
(7). Смотрели. Таблицы в несколько терабайт, так что там всё больно
9 SeiOkami
 
14.03.19
16:52
(3), о, спасибо большое. MERGE работает довольно шустро
10 Сияющий в темноте
 
14.03.19
17:17
А insert or update?
11 SeiOkami
 
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 есть
Независимо от того, куда вы едете — это в гору и против ветра!