SQL: экспорт данных в новую таблицу и одновременное обновление старых данных - PullRequest
0 голосов
/ 30 ноября 2011

Я хочу экспортировать данные из одной таблицы в новую с ночным заданием.

Чтобы предотвратить генерацию дубликатов, я реализовал столбец с именем «ExportState» в исходной таблице, который равен 0 для не экспортируемых и 1 для экспортируемых.

Моя проблема в том, что я хочу экспортировать данные, а затем установить для State значение 1. Но я не могу сделать INSERT INTO ... SELECT, а затем ОБНОВИТЬ операторы, поскольку возможно, что дополнительные данные будут вставлены в исходную таблицу, в то время как рутина экспорта работает. Поэтому в конце я бы ОБНОВИЛ ExportState до 1 для записей, которые я никогда не вставлял в таблицу назначения.

У вас есть предложения по следующим решениям?

A. INSERT INTO ... SELECT и UPDATE ExportState строка за строкой
B. Сделайте снимок INSERT и UPDATE ExportState моментальных снимков данных

Что имеет больше смысла?

Вторая проблема: исходная и целевая таблицы находятся на разных серверах SQL и экземплярах базы данных. Идеи?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2011

Чтобы подключиться к базам данных на других серверах SQL, изучите использование связанных серверов.Вы должны иметь возможность настроить один в папке «Объекты сервера» в SSMS 2008. Вот ссылка на дополнительную информацию, если вы заинтересованы ... http://msdn.microsoft.com/en-us/library/ff772782.aspx

0 голосов
/ 30 ноября 2011

Я бы создал хранимую процедуру для выполнения задачи.

Внутри хранимой процедуры создайте табличную переменную или временную таблицу.Вставьте данные из исходной таблицы, где ExportState = 0, во временную таблицу.(Если у вас есть первичный ключ в этой таблице, просто сохраните первичный ключ в вашей временной таблице.)

Выполните оператор вставки из исходной таблицы в таблицу назначения.

Используя временную таблицу, выполнитеваш оператор обновления для установки ExportState = 1 для каждой записи в вашей временной таблице.

Оберните все это в транзакцию.

Пример кода:

BEGIN TRAN

DECLARE @Exported TABLE (PK INTEGER NOT NULL);
INSERT INTO @Exported (PK) SELECT PK FROM SourceTable WHERE ExportState = 0;

INSERT INTO @DestinationTable (Field Names)
SELECT FieldNames
FROM SourceTable s
INNER JOIN @Exported e
ON s.PK = e.PK
WHERE s.ExportStatus = 0;

UPDATE s SET ExportStatus=1
FROM SourceTable s
INNER JOIN @Exported e
on s.PK =e.PK;

COMMIT TRAN

Вызовхранимая процедура с вашей ночной работы.

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