Sql существует копия - PullRequest
       10

Sql существует копия

0 голосов
/ 02 августа 2009

У меня вопрос к хранимой процедуре mssql для вас, эксперты:

У меня есть две таблицы [table1], которые постоянно получают новые записи. Затем у меня есть другая таблица [table2], в которую мне нужно скопировать содержимое [table1].

Мне нужно проверить, существует ли какая-либо из строк в [table2], если это так, просто обновите метку времени обновления [table2], иначе вставьте ее в [table2].

Таблицы могут быть довольно большими, около 100 тыс. Записей, так какой же самый быстрый способ сделать это?

Следует заметить, что это упрощенная идея, поскольку при копировании нового контента из [Table1] -> [Table2] происходит еще больше обработки данных.

Итак, подведем итог: Если строка существует, [Table1] и [Table2] обновляют временную метку строки в [Table2], в противном случае просто вставьте новую запись с содержимым в [Table1].

Ответы [ 3 ]

2 голосов
/ 02 августа 2009

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

1 голос
/ 02 августа 2009

Это работает во всех версиях SQL Server. MERGE делает то же самое в SQL Server 2008.

UPDATE
    table2
SET
    timestampcolumn = whatever
WHERE
    EXISTS (SELECT * 
       FROM table1
       WHERE
           table1.key = table2.key)


INSERT table2 (col1, col2, col3...)
SELECT col1, col2, col3...
FROM table1
WHERE
    NOT EXISTS (SELECT * 
       FROM table2
       WHERE
           table2.key = table1.key)
0 голосов
/ 02 августа 2009

Учитывая, что это звучит как процесс ETL. Рассматривали ли вы использование SQL Server Integration Services ?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...