|
MERGE WHEN MATCHED UPDATE+INSERT
|
|||
---|---|---|---|
#18+
Помогите пожалуйста разобраться, не могу совладать со скриптом Пытаюсь соблюсти версионирование записей для мастер системы системы в своем ХД. Таким образом вынимаю данные из таблицы, и складываю в свою БД. Но и добавляю признаки. В мастерсистеме запись сохраняет свой идентификатор, но при этом актуализирует поле версии, удаляя предыдущую запись. Моя задача далее сделать MERGE по основному признаку, и по косвенному понимать, изменилась ли запись Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
И вот далее я делаю MERGE Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Но вот одно НО Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
по сути, мне нужно, при выполненном условии, где Target.[_IDRRef] = Source.[_IDRRef], но Target.[_Version] != Source.[_Version] то нужно старую, существующую запись в target перевести в статус архива, но при этом сделать INSERT новой записи из Source Однако я не могу сделать одновременно WHEN MATCHED UPDATE ... INSERT ... WHEN NOT MATCHED Как решить такую задачу? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 19:03 |
|
MERGE WHEN MATCHED UPDATE+INSERT
|
|||
---|---|---|---|
#18+
Двоичник мне нужно, при выполненном условии, где Target.[_IDRRef] = Source.[_IDRRef], но Target.[_Version] != Source.[_Version] то нужно старую, существующую запись в target перевести в статус архива, но при этом сделать INSERT новой записи из Source Затем из нее делать INSERT. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 19:44 |
|
MERGE WHEN MATCHED UPDATE+INSERT
|
|||
---|---|---|---|
#18+
invm, Не понимаю как сделать вставку в буферную таблицу DELETED.* - это то ,что я проапдейтил, увел в архив INSERTED.* - это то что не сметчилось в мерже... хм... хотя наверное я понял посыл. нужно смотреть из DELETED.[_Version] != Source.[_Version] но блин, это повторно собирать сканировать таблицу "Source". Как-то не феньшуйно... В посте я перечислил мало полей, а по факту их порядка 80... Буферную таблицу заполнять 80. полями... Это громоздко ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 19:52 |
|
MERGE WHEN MATCHED UPDATE+INSERT
|
|||
---|---|---|---|
#18+
Моя задача далее сделать MERGE из каких соображений, если это решение не подходит? Напишите BEGIN TRAN UPDATE INSERT COMMIT и не майтесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 19:56 |
|
MERGE WHEN MATCHED UPDATE+INSERT
|
|||
---|---|---|---|
#18+
Двоичник, Можно вот такой изврат попробовать Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.06.2021, 20:54 |
|
MERGE WHEN MATCHED UPDATE+INSERT
|
|||
---|---|---|---|
#18+
Двоичник Однако я не могу сделать одновременно WHEN MATCHED UPDATE ... INSERT ... WHEN NOT MATCHED Как решить такую задачу? Спасибо Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2021, 11:48 |
|
MERGE WHEN MATCHED UPDATE+INSERT
|
|||
---|---|---|---|
#18+
Насчет вот этого выражения: Код: sql 1. 2.
1) Я прекрасно знаю о существовании ISNULL и осознанного его тут не использую 2) Если в таблице (запросе) много полей, то писать это выражение надо используя прямоугольное выделение блоков (в SSMS мышкой с нажатым ALT) 3) Если поле NOT NULL , то оптимизатор просто выкинет выражение Должность IS NOT NULL, что можно увидеть в актуальном плане 4) Запрос громоздкий, но быстрый и представляет собой одну транзакцию ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2021, 11:53 |
|
|
start [/forum/topic.php?fid=46&fpage=21&tid=1684587]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
133ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 500ms |
0 / 0 |