Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
Объясните пожалуйста в чем затруднение, или подскажите если не трудно другой способ решения задачи: В поле таблицы необходимо проставить код с контрольной суммой вычисляемой по определенному алгоритму на основании порядкового номера. Поскольку в колонке изначально значения нет, то порядковый номер беру(возможно ошибочно) из суммы пустых полей этой таблицы: Код: sql 1. 2. 3. 4. Результат этого запроса инкриминирую и помещаю в пользовательскую функцию вместе с алгоритмом расчета: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Прогнав на select-е при пустой колонке cod и при полностью заполненной доп. запросом убеждаюсь что контрольная сумма 1-го и последних чисел верна. Вроде-бы функция написана верно. Теперь запускаю запрос на заполнение: Код: sql 1. 2. 3. 4. Запрос отрабатывает на ожидаемом кол-ве строк, но выдает в колонке cod только 1-ю контрольную сумму на всей выборке. Почему? не сработало! Подсознательно понимаю... что транзакция update запроса не завершилась до конца все выборки и в поле cod пусто, и функция выгребая кол-во заполненных полей не получает постепенное нарастание т.к. запрос вызвавший ее еще на отработал. Наверно это самое простое объяснение, но мне как быть, был бы это PHP поставил бы глобальную переменную и черпал бы из нее нарастающую величину. А тут как быть... Обернул запрос в пару BEGIN TRANSACTION - WAITFOR DELAY '00:00:01.00' -COMMIT TRAN но это ожидаемо не помогло. Помогите пожалуйста советом малопрактикующему sql-програмисту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 17:28 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
Сергей Прокопенко 8, Через cross apply вызови, а так бред чистой воды ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 18:02 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
TaPaKСергей Прокопенко 8, Через cross apply вызови, а так бред чистой водыне поможет ТС, хочет видеть при каждом "следующем" вызове функции в Update , к-во "обновившихся" записей в этом же Update ! Вообщем, там "проце-дурный" подход в самом кондовом его виде :) ТС, Будет что-то типа этого Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Выполни запрос из cte отдельно и посмотри результат, - думаю поймешь идею ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 18:28 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
fix court Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 18:32 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
Спасибо court за помощь. Я нарушил правило: не брать данные в функции из вне, кроме, как только из параметров функции. 1 шаг, создаю доп.поле cod1 2. обновляю его номером строки через over() 3. update таблицы той же функцией но уже с 3-мя параметрами, где новый - наращенный cod 4. подтираю - удаляю столбец сod1 Хотя можно и через CTE-красивее Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 20:48 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
Сергей Прокопенко 8, авторЯ нарушил правило: не брать данные в функции из вне, кроме, как только из параметров функции. 2 Правило бойцовского клуба? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 21:06 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
Сергей Прокопенко 8Я нарушил правило: не брать данные в функции из вне, кроме, как только из параметров функции.Вы в своем update всего-то нарвались на Halloween Problem. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 21:19 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
invmСергей Прокопенко 8Я нарушил правило: не брать данные в функции из вне, кроме, как только из параметров функции.Вы в своем update всего-то нарвались на Halloween Problem. нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 21:22 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
TaPaKнетПлан запросите у ТС'а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 21:30 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
invmTaPaKнетПлан запросите у ТС'а. авторSET @used_cod = (SELECT count(*) -- место, где считаю сколько уже занесено кодов FROM table1 t1 where t1.DATEGEN = @date_akt and t1.cod <> 0) это явно не оттуда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2019, 21:31 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
TaPaK, https://sqlperformance.com/2013/02/sql-plan/halloween-problem-part-4 Раздел "SCHEMABINDING and T-SQL Scalar Functions" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 10:24 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 10:40 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
TaPaKinvm, вот план его запроса, разве Eager Spool не есть "та защита" от Halloween ? Так там в конце как раз и рассказано, что использование не SCHEMABOUND функции, заставляет предполагать оптимизатор в необходимости защиты, а не сам факт ее необходимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 10:55 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
Руслан ДамировичTaPaKinvm, вот план его запроса, разве Eager Spool не есть "та защита" от Halloween ? Так там в конце как раз и рассказано, что использование не SCHEMABOUND функции, заставляет предполагать оптимизатор в необходимости защиты, а не сам факт ее необходимости. и? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 10:57 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
Руслан Дамирович, точнее если читать не только поперёк, а ещё и вдоль (как крокодила), то вся суть сводится к автор Unless a scalar function is declared with the SCHEMABINDING option, SQL Server assumes the function accesses tables. а тут хоть вдоль хоть поперёк обращение к таблице есть. Что соответчсеввно с доблаением даже SCHEMABINDING в планах ничего не меняет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 11:02 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
TaPaK, Лично я считаю, что дело в детерминированности, а не в SCHEMABINDING. В недетерминированной скалярной функции потенциально возможен доступ к данным, поэтому в план добавляется halloween protection. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 11:31 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
invmTaPaK, Лично я считаю, что дело в детерминированности, а не в SCHEMABINDING. В недетерминированной скалярной функции потенциально возможен доступ к данным, поэтому в план добавляется halloween protection. так проблема не в Halloween Problem? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 11:32 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
TaPaKтак проблема не в Halloween Problem?Решили попридираться к словам? Ок, дело в защите от Halloween Problem. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 11:42 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
court... Тогда уж так как-то: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 17:07 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
Подозреваю, что автор хотел на самом деле вот это сделать: Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2019, 18:58 |
|
||
|
Возвращение из пользовательской функции значения по наростающей в Update запрос
|
|||
|---|---|---|---|
|
#18+
Все гениальное просто: Владислав КолосовПодозреваю, что автор хотел на самом деле вот это сделать: Код: sql 1. 2. Спасибо, Владислав Колосов У CTE есть 1н большой минус, коллеги замещающие тебя во время больничного или отпуска решительно не приемлют такую форму записи и норовят впихнуть пароль от TeamViewer-ра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2019, 22:01 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39780829&tid=1688196]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
146ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 527ms |

| 0 / 0 |
