SQL Server 2005: хранимая процедура для перемещения строк из одной таблицы в другую - PullRequest
0 голосов
/ 29 октября 2010

У меня есть 2 таблицы одинаковых схем. Мне нужно переместить строки старше 90 дней (на основе столбца dataTime, присутствующего в таблице) из таблицы A в таблицу B. Вот псевдокод того, что я хочу сделать

SET @Criteria = getdate()-90

Select * from table A
Where column X<@Criteria
Into table B

--now clean up the records we just moved to table B, in Table A
delete from table A Where column X<@Criteria

Мои вопросы:

  1. Каков наиболее эффективный способ сделать это (будет хорошо работать при больших объемах)? В таблице A будет ~ 180 000 000 строк, и ей нужно будет перемещать ~ 4 000 000 строк за раз в таблицу B.

  2. Как мне инкапсулировать это в одну транзакцию, чтобы не удалять строки из таблицы A, если при вставке их в таблицу B. произошла ошибка. Я просто хочу убедиться, что случайно не удаляю строку из таблицы A, если только я успешно не записал ее в таблицу B.

  3. Есть ли какие-нибудь хорошие книги по SQL Server 2005, которые вы рекомендуете?

Спасибо, Chris

Ответы [ 2 ]

0 голосов
/ 29 октября 2010

относительно Как мне заключить это в одну транзакцию, чтобы не удалять строки из таблицы A, если при вставке их в таблицу B. произошла ошибка *

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

0 голосов
/ 29 октября 2010

Я думаю, что SSIS, вероятно, лучшее решение для ваших нужд.

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

Транзакции могут быть установлены для любой задачи потока данных с использованием свойства TransactionOption. Ознакомьтесь с этой статьей о том, как использовать транзакции в SSIS

Некоторые основные учебные пособия по пакетам служб SSIS и их созданию можно найти по ссылкам здесь и здесь

...