Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
При переводе бэкенда базы с MS Access на SQL server 2017 с сохранением фронтенда на MDB, помимо прочих возникла проблема с перекрёстными запросами и зависимыми от них запросами. Для самих перекрёстных запросов написана базовая функция msrTransformAsAccessDo, которая используя динамический SQL возвращает набор записей: msrTransformAsAccessDo Код: 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. И для каждого из перекрёстных запросов по функции обёртке с вызовом: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Тестовая таблица tbl_test Код: 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. Соответственно результат самого перекрёстного запроса получить легко: Код: sql 1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В FAQ :Select из результата выполнения хранимой процедуры описано 2 варианта. Первый - "Оформить хранимую процедуру как функцию", не подходит т.к. количество столбцов неизвестно, второй - "Получить набор через временную таблицу" - потребует превратить все зависимые запросы в хранимые процедуры с динамическим SQL и потребует написания сложной программы создающей тексты этих процедур. Подскажите, какие есть ещё варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 11:19 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
4d_monster, OPENQUERY но смысл перехода с таким подходом теряется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 11:29 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
TaPaK, К сожалению OPENQUERY и openrowset не работают с динамическим SQL: Код: sql 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 12:06 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 14:30 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Есть ажно три пути. 1. Разучить таки родной pivot MS SQL. 2. В процедуре засовывать результат во временную таблицу и возвращать селект из времянки. 3. Забить на это фуфло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 14:33 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
KRS544, А как этот результат использовать в качестве источника для SELECT? aleks222, 1. А где прочитать как родной pivot MS SQL поддерживает динамические столбцы? 2. этот вариант описан в вопросе, он резервный. 3. это ещё недостаточно большая проблема, чтобы отказываться от SQL server ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 14:59 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
4d_monsterKRS544, А как этот результат использовать в качестве источника для SELECT? insert into Table exec ('...') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 15:01 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
не хочу создавать тему, спрошу здесь, т.к. очень похоже Есть хранимые процедуры, возвращающие таблицу, у процедур могут быть параметры, менять процедуры нельзя нужно получить возможность делать SELECT * FROM <процедура> из клиентов, т.е. процедуру можно обернуть любым скриптом, но клиент не может выполнять скрипты, только запросы попробовал обернуть в функцию с временной таблицей но получил 1) [Code: 2772, SQL State: S1000] Cannot access temporary tables from within a function. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 15:13 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Sintetikне хочу создавать тему, спрошу здесь, т.к. очень похожеА предложенное решение вам не подходит? Или вы не прочитали ответы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 16:26 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
alexeyvgSintetikне хочу создавать тему, спрошу здесь, т.к. очень похожеА предложенное решение вам не подходит? Или вы не прочитали ответы? читал, которое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 17:48 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Sintetikalexeyvgпропущено... А предложенное решение вам не подходит? Или вы не прочитали ответы? читал, которое?Вот это: Код: sql 1. Если, конечно, у вас нет динамического SQL. Но вы про него не писали. Если есть, то решения не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 02:12 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Sintetikпопробовал обернуть в функцию с временной таблицей но получил 1) [Code: 2772, SQL State: S1000] Cannot access temporary tables from within a function.В функции можно использовать таблицы-переменные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 02:14 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
alexeyvgSintetikпропущено... читал, которое?Вот это: Код: sql 1. Если, конечно, у вас нет динамического SQL. Но вы про него не писали. Если есть, то решения не существует. динамического нет, но в этом варианте нужно в строку вызова передавать логин-пароль, по крайней мере в примере выше так было, поэтому я откинул этот вариант, или можно обойтись без передачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 10:47 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Sintetikдинамического нет, но в этом варианте нужно в строку вызова передавать логин-пароль, по крайней мере в примере выше так было, поэтому я откинул этот вариант, или можно обойтись без передачи? а нет, значит в другом примере видел, когда рыскал в поисках решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 10:49 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
SintetikSintetikдинамического нет, но в этом варианте нужно в строку вызова передавать логин-пароль, по крайней мере в примере выше так было, поэтому я откинул этот вариант, или можно обойтись без передачи? а нет, значит в другом примере видел, когда рыскал в поисках решенияНет, это для OPENDATASOURCE нужно, да и то не всегда. А для OPENQUERY никогда не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 11:00 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Sintetikне хочу создавать тему, спрошу здесь, т.к. очень похоже Есть хранимые процедуры, возвращающие таблицу, у процедур могут быть параметры, менять процедуры нельзя нужно получить возможность делать SELECT * FROM <процедура> из клиентов, т.е. процедуру можно обернуть любым скриптом, но клиент не может выполнять скрипты, только запросы попробовал обернуть в функцию с временной таблицей но получил 1) [Code: 2772, SQL State: S1000] Cannot access temporary tables from within a function. FAQ почитайте: http://www.sql.ru/faq/faq_topic.aspx?fid=416 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 11:10 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
alexeyvgSintetikпропущено... читал, которое?Вот это: Код: sql 1. Если, конечно, у вас нет динамического SQL. Но вы про него не писали. Если есть, то решения не существует. автор[Code: 7202, SQL State: S1000] Could not find server 'LOOPBACK' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 16:18 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Sintetikalexeyvgпропущено... Вот это: Код: sql 1. Если, конечно, у вас нет динамического SQL. Но вы про него не писали. Если есть, то решения не существует. автор[Code: 7202, SQL State: S1000] Could not find server 'LOOPBACK' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers. линк кто за вас создать? справку о команде тоже лень прочитать? Сразу на форум строчить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 16:20 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Sintetikавтор[Code: 7202, SQL State: S1000] Could not find server 'LOOPBACK' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.Да, вот что написано, то и нужно сделать. Или в графическом интерфейсе, если вам так удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 16:48 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
TaPaKлинк кто за вас создать? справку о команде тоже лень прочитать? Сразу на форум строчить я полагал, что есть по умолчанию стандартный линк сам на себя с таким именем LOOPBACK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 17:09 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Sintetikя полагал, что есть по умолчанию стандартный линк сам на себя с таким именем LOOPBACKНет, увы. Просто непонятно, зачем он нужен, ведь любой динамический запрос можно сделать просто в EXEC, всё таки такое редко встречается, что нужно непременно слово SELECT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 17:48 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
4d_monster, Как вариант - пускай ваша процедура только строит строку запроса, но не запускает, а просто возвращает вам ее, ну а далее вы в динамике делаете с ней что хотите... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 23:48 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
AndrF, Получается есть только два варианта: 1. создавать временные таблицы 2. использовать динамический текст запроса. И оба варианта требуют превращения запросов, зависимых от перекрёстного, в хранимые процедуры. Проверю, какой проще в реализации и выберу его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 08:40 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
4d_monsterAndrF, Получается есть только два варианта: 1. создавать временные таблицы 2. использовать динамический текст запроса. И оба варианта требуют превращения запросов, зависимых от перекрёстного, в хранимые процедуры. Проверю, какой проще в реализации и выберу его. Есть еще самый нормальный вариант - изменить процедуру внутри, чтобы она результат сама в таблицу писала Кто ж вам доктор, что у вас по нормальному нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 12:22 |
|
||
|
Использовать результат динамического запроса хранимой процедуры в запросе или VIEW
|
|||
|---|---|---|---|
|
#18+
Ivan Durak4d_monsterAndrF, Получается есть только два варианта: 1. создавать временные таблицы 2. использовать динамический текст запроса. И оба варианта требуют превращения запросов, зависимых от перекрёстного, в хранимые процедуры. Проверю, какой проще в реализации и выберу его. Есть еще самый нормальный вариант - изменить процедуру внутри, чтобы она результат сама в таблицу писала Поля не определены заранее ведь это динамический перекрёстный запрос, поэтому ваше предложение это 1 пункт. Ivan DurakКто ж вам доктор, что у вас по нормальному нельзя "Legacy" знаете? Тамошние мы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 12:55 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=133&tid=1689033]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 265ms |
| total: | 465ms |

| 0 / 0 |
