|
|
|
Вызов хранимой процедуры из Select'a
|
|||
|---|---|---|---|
|
#18+
Имеется динамически генерируемый скрипт. Для упрощения возьмем такой: 'select EmployeeID from Employees'. Выполнить скрипт из функции через Exec в принципе невозможно! Поэтому остается лишь вариант использования хранимой процедуры. Обзовем её SP_Employees. Внимание, вопрос! Можно ли каким то образом набор строк, возвращаемых этой процедурой, использовать в Select'е. По идее, хочется иметь чтонить вроде select ea.* from EmloyeeAtributes ea join (exec SP_Employees) emp on ea.EmployeeID=emp.EmployeeID. Понятное дело это не работает. В данный момент, один выход вижу: insert #temp exec SP_Employees. И дальше уже работать с этой временной таблицей. Есть ли еще варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 14:30:39 |
|
||
|
Вызов хранимой процедуры из Select'a
|
|||
|---|---|---|---|
|
#18+
Если процедура без параметров, то можно попробовать так select * from master..sysxlogins a inner join openquery( myownserver , 'exec sp_who') b on b.loginame = a.name В SQL2000 лучше преобразовать процедуру в функцию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 14:58:32 |
|
||
|
Вызов хранимой процедуры из Select'a
|
|||
|---|---|---|---|
|
#18+
OpenQuery видимо не подойдет, потому как процедура у меня с параметрами будет. Это я здесь упростил. Кроме того, OpenQuery нужен linked server. Как свой сервер сделать прилинкованым к самому себе? Процедуру заменить функцией нельзя потому, что нужно из неё вызывать динамически генерируемый скрипт. Execute из функции можно вызывать только для расширеных процедур :( Тем не менее, спасибо за внимание :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 15:15:52 |
|
||
|
Вызов хранимой процедуры из Select'a
|
|||
|---|---|---|---|
|
#18+
Параметры можно в строку запуска скидывать, самого себя как remote server добавить и сказать еще exec sp_serveroption 'yourserver','data access','true' потом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 15:37:29 |
|
||
|
Вызов хранимой процедуры из Select'a
|
|||
|---|---|---|---|
|
#18+
По поводу UDF (функций): при создании табличной функции необходимо указать набор полей, которые она возвращает. Таким образом, даже через extended stored procedure невозможно будет выдавать результаты динамического Select'а. Поправьте меня, если я заблуждаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 15:49:25 |
|
||
|
Вызов хранимой процедуры из Select'a
|
|||
|---|---|---|---|
|
#18+
Пояснение: как Вы понимаете, создавая inline функцию Вы автоматически перечисляете набор возвращаемых полей... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 15:51:06 |
|
||
|
Вызов хранимой процедуры из Select'a
|
|||
|---|---|---|---|
|
#18+
2 VVG_: мысль с параметрами ясна и ремоут сервер добавлять вроде даже не надо, а вот зачем нужно опцию устанавливать не понял (exec sp_serveroption 'yourserver','data access','true'). Щас опробую, поделюсь результатами. Спасибо! 2 jimmers: я не говорил про UDF. Речь шла о функции СКЛ-сервера (см. create function). С тех пор как с интербейса на MSSQL перешел необходимости в расширенных процедурах не возникало. Было это давно и на текущий момент компетентно прокоментировать возможность использования UDF не могу. За внимание спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 16:09:20 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1819208]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 351ms |

| 0 / 0 |
