1. SQL / Говнокод #23355

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    while exists (
      select 
        C.CONTRAGENT_NAME,
        PR.PHONE 
      from CONTRAGENTS C
        inner join CONTRAGENT_PROPERTIES PR on PR.CONTRAGENT_ID = C.CONTRAGENT_ID
      except select NAME,PHONE from IMPORT_SOURCE)
    begin
      declare @IDENTITIES table (CONTRAGENT_ID int)
      insert CONTRAGENTS (
        CONTRAGENT_NAME,
        …)
      output inserted.CONTRAGENT_ID into @IDENTITIES
      select distinct
        NAME,
        …
      from IMPORT_SOURCE
    
      insert CONTRAGENT_PROPERTIES (
        …,
        PHONE,
        …)
      select
        …,
        S.PHONE
        …
      from @IDENTITIES I
        inner join CONTRAGENTS C on C.CONTRAGENT_ID = I.CONTRAGENT_ID
        cross apply (
          select top 1
          from IMPORT_SOURCE S
            left join (
              select
                C.CONTRAGENT_NAME,
                PR.PHONE 
              from CONTRAGENTS C
                inner join CONTRAGENT_PROPERTIES PR on PR.CONTRAGENT_ID = C.CONTRAGENT_ID
            ) TX on TX.CONTRAGENT_NAME = S.NAME and TX.PHONE = S.PHONE
          where TX.CONTRAGENT_NAME is null)
    end

    Импорт. В источнике за ключевые поля нужно было взять NAME и PHONE, которые в целевой базе — в разных таблицах. Курсоры — слишком долго.

    Запостил: tucvbif, 23 Сентября 2017

    Комментарии (0) RSS

    Добавить комментарий

    Ошибка компиляции комментария:
    1. Гости могут высказаться только во вторник, пятницу или субботу
    ava Где здесь C++, guest?!
    А не использовать ли нам bbcode?
    • [b]жирный[/b] — жирный
    • [i]курсив[/i] — курсив
    • [u]подчеркнутый[/u] — подчеркнутый
    • [s]перечеркнутый[/s] — перечеркнутый
    • [blink]мигающий[/blink] — мигающий
    • [color=red]цвет[/color] — цвет (подробнее)
    • [size=20]размер[/size] — размер (подробнее)
    • [code=<language>]some code[/code] (подробнее)
    Проверочный код