none
как проконтролировать загружен файл или не загружен и при повторном запуске не загружать повторно? RRS feed

  • Вопрос

  • Имеется промежуточная таблица в SQL куда из dbf файла загружаем данные. Теперь из этой таблицы должны загрузить данные в реальную БД. Дело в том что из dbf файла каждый день будем загружать данные, а те старые загрузки из dbf файла должны оставаться  в промежуточной таблице, только должны отмечаться что эти данные были загружены и при повторном запуске не должны загружаться в реальную базу. Как это можно реализовать? 

Ответы

  • Посмотрите в сторону оператора MERGE - http://technet.microsoft.com/en-us/library/bb510625.aspx он как раз объединяет в себе операторы INSERT/UPDATE/DELETE в зависимости от ваших условий,

    вот пример:

    --Для демнстрации тестовая таблица с 2-мя полями
    declare @t table ( a int, b char(5) );
    
    --Первый запуск...вставляем 3 записи
    merge @t t1
    using ( values ( 1, 'AAA01' )
                 , ( 2, 'BBB01' ) 
                 , ( 3, 'CCC01' ) 
          ) t2(a,b)
    on t1.a = t2.a
    when not matched then insert values (a,b)
    when matched then update set b = t2.b;
    --Смотрим, что в таблице
    select * from @t;
    
    
    --Второй запуск...вставляем 3 записи, при этом 2 из них уже есть в таблице 
    merge @t t1
    using ( values ( 1, 'AAA02' )
                 , ( 2, 'BBB02' ) 
                 , ( 4, 'DDD02' ) 
          ) t2(a,b)
    on t1.a = t2.a
    when not matched then insert values (a,b)
    when matched then update set b = t2.b;
    --Смотрим, что теперь у нас в таблице
    select * from @t
    

    Результат:


    http://www.t-sql.ru

    Модератор