Перенос данных
Простой пример переноса документа “ЗаказПокупателя” и его табличной части “Товары” из базы данных Microsoft SQL Server в базу данных на PostgreSQL.
DECLARE @Заказ object
DECLARE @Товар object
DECLARE @Товары array
DECLARE @Счётчик number = 0
-- База данных источник
USE 'mssql://server/database'
STREAM Ссылка, Дата, Номер
, Проведён, ПометкаУдаления
, Покупатель, СуммаДокумента
INTO @Заказ
FROM Документ.ЗаказПокупателя
-- Табличная часть "Товары"
-- Выбираем код справочника "Номенклатура" для синхронизации
SELECT Товары.Ссылка, Товары.KeyField, Товары.НомерСтроки
, Товары.Номенклатура, Товары.Количество, Товары.Цена, Товары.Сумма
, КодТовара = Номенклатура.Код
INTO @Товары
FROM Документ.ЗаказПокупателя.Товары AS Товары
INNER JOIN Справочник.Номенклатура AS Номенклатура
ON Товары.Номенклатура = Номенклатура.Ссылка
WHERE Товары.Ссылка = @Заказ.Ссылка
ORDER BY Товары.НомерСтроки ASC
-- База данных приёмник
USE 'pgsql://postgres:postgres@localhost:5432/database'
INSERT Документ.ЗаказПокупателя
SELECT Ссылка = @Заказ.Ссылка
, Дата = @Заказ.Дата
, Номер = @Заказ.Номер
, Проведён = @Заказ.Проведён
, ПометкаУдаления = @Заказ.ПометкаУдаления
, Покупатель = @Заказ.Покупатель
, СуммаДокумента = @Заказ.СуммаДокумента
-- Табличная часть "Товары"
-- Синхронизация справочника "Номенклатура" по коду
-- Для подготовки данных используется общее табличное выражение
FOR @Товар IN @Товары
CREATE COMPUTED TABLE Данные AS
(
SELECT Ссылка = @Заказ.Ссылка
, KeyField = @Товар.KeyField
, НомерСтроки = @Товар.НомерСтроки
, Количество = @Товар.Количество
, Цена = @Товар.Цена
, Сумма = @Товар.Сумма
, Номенклатура = (SELECT TOP 1 Ссылка
FROM Справочник.Номенклатура
WHERE Код = @Товар.КодТовара)
)
INSERT Документ.ЗаказПокупателя.Товары FROM Данные
END -- Табличная часть "Товары"
END -- Контекст базы приёмника
SET @Счётчик = @Счётчик + 1
END -- Контекст базы источника
PRINT 'Перенесено ' + @Счётчик + ' документов'