Skip to the content.

STREAM

Перенос данных

Простой пример переноса документа “ЗаказПокупателя” и его табличной части “Товары” из базы данных 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 'Перенесено ' + @Счётчик + ' документов'

Наверх