|
|
|
Выборка из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Доброе время суток! Господа! Как select'ом взять данные из хранимой процедуры, возвращающей таблицу? Невыносимо нужно... Просто select * from sp_Name конечно же ничего не дает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 04:10:39 |
|
||
|
Выборка из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Невыносимо нужно... Наверное всё-таки невыносимо хочется В лоб это не сделать. Есть 3 варианта: 1. Написать вместо процедуры табличную функцию. Но функция не может иметь побочный эфект, так что это может Вам и не подойти. 2. Создать временную таблицу соответствующей структуры и использовать синтаксис insert #TBL exec sp_Name. Но учтите что такая конструкция не допускает вложености - в процедуре оно уже не должно использоваться. 3. Использовать OPENQUERY. Смотрите хелп, сам я никогда им не пользовался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 06:16:42 |
|
||
|
Выборка из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Я пользовался OpenQuery Работает, конечно, но это надо свой же сервер открыть для доступа (типа прилинковать самого себя). Как устойчиво - не знаю. Одно только плохо - запускаться будет с правами пользователя, запустившего процедуру, а не владельца (как Execute) Обычно использую insert во временную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 06:34:43 |
|
||
|
Выборка из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Часто задаваемый вопрос. Есди проц гонит в ровсет, то работает такая схема CREATE TABLE #T1 ( iname varchar(60), idiscr varchar(60) , ikeys varchar(30) ) insert #t1 exec sp_helpindex 'authors' -- !!!!!!!!! select * from #t1 drop table #t1 сначала надо узнать имена колонок выдаваемых ХП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 06:46:22 |
|
||
|
Выборка из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Я уже вроде дошел сам до того, что можно создать и функцию, но... это к сожалению мне ничего не дало. Весь вопрос в том, что я в Access пытаюсь передать параметры в SQL Server, ну вот так сложилось до меня еще, что клиенты на аксесе писаны... Так вот единственный способ похоже - переписывать запрос каждый раз заново, но и тут беда... Запрос не работает в обычном виде как для exec'а, так и для select'а из функции - он функцию не принимает... единственный вариант - создавать запрос к серверу, но как его переписывать заново - пока не нашел. То есть : 1) Как я понял, данные передавать в хранимую процедуру можно только путем переписывания запроса заново, т.к. у готового запроса из VBA я ничего поменять не смог. Теперь запрос создается так: Private Sub Button_Click() Dim dbs As DAO.Database Dim qdf As DAO.QueryDef Dim strSQL As String Set dbs = CurrentDb strSQL = "SELECT * FROM Table1 IN '' [ODBC;DSN=DB;UID=Sergey;DATABASE=DB;Trusted_Connection=Yes] where (F1=4)" DoCmd.DeleteObject acQuery, "SecondQuarter" Set qdf = dbs.CreateQueryDef("SecondQuarter", strSQL) End Sub Воооот.... 2) А вот созданое таким образом обращение к хранимой процедуре или функции не работает, при select * from fun1(1,5) он пишет, что это ошибка... ну, функций не знает аксес, что ж теперь... Остается что? Запрос к серверу. там работает как select * from fun1(1,5) так и exec sproc1 1,5 или просто sproc1 1,5 А теперь вопрос. Из VB можно создать не запрос, а запрос к серверу??????? Это я копирнул то, что я на Аксесовском форуме постил, но может и тут кто знает? А за ответы - гросс спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 07:12:09 |
|
||
|
Выборка из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Ничего я не понял, если честно, из объяснений Seryog@. Чего, в акцессе нельзя хранимую процедуру вызвать, что ли, и параметры ей передать? Я с ним не работал, но очень уж странное оно, объяснение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 07:25:50 |
|
||
|
Выборка из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Можно. Но статично. То есть в запросе к серверу нельзя указать параметры, а только готовые данные. например: select * from TB where FLD = 2, а не select * from TB where FLD = VAR а мне нужно exec SP VAR, VAR или select * from FUNC(VAR,VAR) единственный способ - переписывать запрос из модуля с подставлением ЗНАЧЕНИЙ, то есть чтобы в запросе были уже ЧИСЛА, а не переменные. Но я нашел как можно создавать только внутренние запросы, они могут работать с ODBC, но только с таблицами и выборками, а вот процедуры и функции они воспринимают как ошибку в запросе. Так вот вопрос именно в том теперь чтобы создавать не внутренние запросы, а именно запросы к серверу... как это делать - Бог знает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 08:57:41 |
|
||
|
Выборка из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
> exec SP VAR, VAR или select * from FUNC(VAR,VAR) Если Вам необходимо передать значение FUNC(VAR,VAR)то придется пользоваться Вашим select * from TB where FLD = ... А вот чему равно: Эта функция FUNC(VAR,VAR) должна быть на клиенте, а записывается так where FLD = Format(FUNC(VAR,VAR)) Это типа запроса с параметром, где параметр определяется в момент выполнения запроса. Причем, если код типа DIM str as STRING str="select * from TB where FLD = " то далее str=str & Format(FUNC(VAR,VAR)) Все вышесказанное- решение в лоб. А знать хотелось бы Клиент работает с проетом adp, с присоединенными таблицами, или каждый запрос коннкетится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 09:13:45 |
|
||
|
Выборка из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Это как раз работает - если select * from TAB и т.д. А вот если select * from func(1,5) то всё... т.к. запрос типа SELECT * FROM Table1 IN '' [ODBC;DSN=DB;UID=Sergey;DATABASE=DB;Trusted_Connection=Yes]where (F1=4)" выполняется все равно на клиенте и только подбирает таблицы с сервера. функцию я имел ввиду SQL Server'а и выполняться она и должна на сервере, иначе какой смысл? И, кстати, OpenQuery то же самое - не воспримется таким запросом. Клиент у меня с присоединенными таблицами, все кроме таблиц я вот пытаюсь унести на сервер - а вот... На самом деле, я конечно уже ушел от тем SQL Servera, тут, я думаю, вопрос чисто аксесовский, т.к. всё кроме передачи параметров работает.... Не обессутьте уж %)) Может кто и знает случайно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 09:25:39 |
|
||
|
Выборка из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Вот Вы сами и ответили: присоединенные таблицы А функции не присоединяются и XП тоже. Если бы был проект adp -там есть хранимые процедуры с сервера. Придется Вам как-то хитрить. Но это уже всем не интересно. Если есть вопросы, напишите свой e-mail. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 09:52:27 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1822670]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
85ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 431ms |

| 0 / 0 |
