|
return в хранимой процедуре
|
|||
---|---|---|---|
#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. 25. 26.
в студии будет выведено и количество строк (в переменной @c), и содержимое таблицы #t (т.е. не произойдет безусловный выход по инструкции return)? При этом, если заменить временную таблицу на табличную переменную, либо предварительно сохранить результат select count(*) в переменную, то выход срабатывает. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 23:08 |
|
return в хранимой процедуре
|
|||
---|---|---|---|
#18+
straybullet, какая-то недокументированная конструкция. Так будет соответствовать: Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 23:18 |
|
return в хранимой процедуре
|
|||
---|---|---|---|
#18+
Похоже на багу. Воспроизводится только если селектить в return их времянки (табличная переменная или перманентная таблица дают ожидаемый результат). Воспроизводится на 2016. Можно репортить. С другой стороны, зачем что-то писать после безусловного выходя из процедуры?... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 02:28 |
|
return в хранимой процедуре
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич С другой стороны, зачем что-то писать после безусловного выходя из процедуры?... Скажем, я проверяю баланс счёта, если бабла не хватает, то выход, или начинаю списание денег. А тут инструкция "return" игнорируется, и продолжается выполнение, начинается процесс списывания денег. straybullet, Другое дело, вопрос: "а зачем возвращать значение инструкцией return?" В T-SQL принято, что процедуры возвращают код ошибки, или возвращаемое значение вообще не используется. А возвращают скалярные значения параметром с свойством output Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 09:15 |
|
return в хранимой процедуре
|
|||
---|---|---|---|
#18+
Спасибо за ваши ответы. Тоже склоняюсь к мнению, что это баг. Причина, по которой я решил воспользоваться return, заключалась в том, что изначально процедура не возвращала число строк, а когда это понадобилось в одной точке вызова, то в других (где число строк не требуется) не пришлось бы менять код (а output-параметры не могут быть опциональными). Буду репортить. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 09:40 |
|
return в хранимой процедуре
|
|||
---|---|---|---|
#18+
straybullet а output-параметры не могут быть опциональными Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 10:20 |
|
return в хранимой процедуре
|
|||
---|---|---|---|
#18+
straybullet, Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 10:27 |
|
|
start [/forum/topic.php?fid=46&fpage=70&tid=1686531]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 316ms |
total: | 433ms |
0 / 0 |