|
Как передать в хранимку список значений, чтобы не перебирать каждое?
|
|||
---|---|---|---|
#18+
Добрый день! Застрял на одном вопросе, подскажите, есть табличка: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
и, регулярно появляется задача добавить новых учеников в класс, а тех, кого уже нету - удалить. выбор пал на инструмент Merge . но я не могу сообразить как передать сразу пачку учеников, чтобы хранимка сама определила список кого добавить, а кого удалить. Не хочется перебирать каждое имя по отдельности. Вызов хранимки примерной такой: EXEC dbo.PupilsInsert @ClassID = 1, @Pupilsnames = 'Ваня,Петя,Жора,Маша'; и, теперь, нужно отобрать всех учеников из первого класса и добавить только тех, кто отсутствует (т.е. добавить нужно только Машу) из переданного параметра. Накидываю хранимку, да только тщетно всё. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
С уважением. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2019, 14:53 |
|
Как передать в хранимку список значений, чтобы не перебирать каждое?
|
|||
---|---|---|---|
#18+
palladin600 но я не могу сообразить как передать сразу пачку учеников 1) Передать табличку как параметр (см. табличные параметры ) 2) Сделать внутри таблицу-переменную, в неё вставить (распарсить) ваш параметр @PupilsNames nvarchar(max), на этом форуме можно найти примеры. 3) Передать список в виде XML, использовать функции работы с XML для получения таблицы, которую можно либо вставить в ту же таблицу-переменную, либо использовать напрямую в запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2019, 15:59 |
|
Как передать в хранимку список значений, чтобы не перебирать каждое?
|
|||
---|---|---|---|
#18+
alexeyvg palladin600 но я не могу сообразить как передать сразу пачку учеников 1) Передать табличку как параметр (см. табличные параметры ) 2) Сделать внутри таблицу-переменную, в неё вставить (распарсить) ваш параметр @PupilsNames nvarchar(max), на этом форуме можно найти примеры. 3) Передать список в виде XML, использовать функции работы с XML для получения таблицы, которую можно либо вставить в ту же таблицу-переменную, либо использовать напрямую в запросе. Эээх. Самого простого и правильного не сказал. 1. Тупо вставить значения во временную табличку. 2. Обработать эту времянку в процедуре. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2019, 17:06 |
|
Как передать в хранимку список значений, чтобы не перебирать каждое?
|
|||
---|---|---|---|
#18+
aleks222 alexeyvg пропущено... Варианты: 1) Передать табличку как параметр (см. табличные параметры ) 2) Сделать внутри таблицу-переменную, в неё вставить (распарсить) ваш параметр @PupilsNames nvarchar(max), на этом форуме можно найти примеры. 3) Передать список в виде XML, использовать функции работы с XML для получения таблицы, которую можно либо вставить в ту же таблицу-переменную, либо использовать напрямую в запросе. Эээх. Самого простого и правильного не сказал. 1. Тупо вставить значения во временную табличку. 2. Обработать эту времянку в процедуре. Но всё таки лучше учиться другим, а то с этой временной таблицей будут перекомпиляции, при массовых вызовах будет просадка производительности. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2019, 18:48 |
|
Как передать в хранимку список значений, чтобы не перебирать каждое?
|
|||
---|---|---|---|
#18+
palladin600, Создание объектов Код: 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.
Выполнение примера Код: 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. 56. 57. 58. 59. 60. 61. 62. 63.
Будет работать правильно только для полного обновления таблицы, для частичного нужно мержить через CTE ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 10:28 |
|
Как передать в хранимку список значений, чтобы не перебирать каждое?
|
|||
---|---|---|---|
#18+
alexeyvg aleks222 пропущено... Эээх. Самого простого и правильного не сказал. 1. Тупо вставить значения во временную табличку. 2. Обработать эту времянку в процедуре. Но всё таки лучше учиться другим, а то с этой временной таблицей будут перекомпиляции, при массовых вызовах будет просадка производительности. Ога, парсинг хмл - он сам делается, без затрат ресурсов. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 13:16 |
|
Как передать в хранимку список значений, чтобы не перебирать каждое?
|
|||
---|---|---|---|
#18+
aleks222, нет идеального решения в такой ситуации. Все имеют недостатки. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 13:25 |
|
Как передать в хранимку список значений, чтобы не перебирать каждое?
|
|||
---|---|---|---|
#18+
Спасибо ребята, entrypoint спасибо за пример. Ещё вот от одного человека получил идею в виде JSON: Код: sql 1. 2. 3.
Код: sql 1. 2. 3.
Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2019, 16:29 |
|
|
start [/forum/topic.php?fid=46&msg=39909616&tid=1686693]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 331ms |
total: | 450ms |
0 / 0 |