powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SELECT TAB1.*,SP.*
23 сообщений из 23, страница 1 из 1
SELECT TAB1.*,SP.*
    #32041106
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Каким образом возможно вернуть в селекте результат хранимой процедуры
Например: в качестве аргумента принимается значение поля таблицы, хранимая процедура (условно говоря) умножает его на два и необходимо получить в результирующем наборе вводимое поле и результат, обработанный процедурой
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041113
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слабо?
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041119
Фотография Maxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верни пустой селект(рекордсет) и отлови его
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041120
Artem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это можно реализовать в виде INLINE - UDF (пользовательских функций)
смотри BOL
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041131
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А попроще?
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041137
Фотография snake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
куда еще проще UDF???
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041148
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не думаю, что такой вариант будет работоспособен,
тому есть несколько причин с моей точки зрения. Могу и ошибаться.

1. SP может возвращать неограниченное число рекордсетов.

2. SP может выводить какие либо данные через PRINT

3. план исполнения SP не всегда известен, т.к. в ней могут использоваться различные конструкции типа EXEC [sp_executesql].

ну и дальше...
кстати, мне самому было бы интересно, что скажут гуру на эту тему, т.к. проблема, подбная указанной у меня уже появлялась
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041150
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а как?
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041166
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с UDF работает все нормально, просто и красиво
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041170
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
С помощью динамического SQL. Пример:
declare @SQLString varchar(8000)
declare @Param int
set @Param=3
set @SQLString='select '+cast(@Param as varchar(10))+'*2'
exec (@SQLString)

Следует только учесть, что динамический SQL выполняется не с правами автора хранимой процедуры, в которой он задействуется, а с правами пользователя, запускающего данную процедуру. Поэтому если динамический SQL использует обращение к каким-либо таблицам или другим объектам БД, у пользователя должны быть соответсвующие права доступа к этим объектам.
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041178
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2AVL

UDF не панацея в том случае, когда есть необходимость использовать EXEC, т.к. в UDF это запрещено :(

вот и приходится писать через курсоры и затем последовательно исполнять запросы :)
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041186
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2AAron
согласен
все зависит от постановки задачи.
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041187
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Постановка задачи:
в качестве аргумента принимается значение поля таблицы, хранимая процедура (условно говоря) умножает его на два и необходимо получить в результирующем наборе вводимое поле и результат, обработанный процедурой
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041189
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE FUNCTION dbo.multi_pulti (@chislo int)
RETURNS int AS
BEGIN
return @chislo*2
END
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041191
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select dbo.multi_pulti(int_field), int_field
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041210
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это некрасиво
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041215
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня SQL7.0 и там нету UDF
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041231
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Новичок
напиши, какой рекордсет ты хотел бы от хранимой процедуры получить?

кстати, можно немного извратится и сделать подобным образом

Код: plaintext
1.
2.
insert into #tmp
exec tmpProc


тогда RS будет записан в таблицу TMP, но с этим надо очень осторожно работать
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041236
Новичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне бы надо так:
select tb1.field1, exec sp_1 tb1.field1 from table tb1
При этом sp_1 возвращает единственное значение
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041240
~Bazul~
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используй OPENQUERY, если хочешь пренеприменно выполнить одним селектом. Синтаксис смотри в BOL. Правда способ тоже через одно место, нужно залинковать сам на себя сервер, но краше вариант для SQL7 - временные таблы, для 2000- UDF.
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041250
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а может имеет смысл вместо ХП использовать подзапрос?
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041255
Нвичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Там внутри куча всего, локальные переменные, навороченные sql- конструции, короче ;jgf
...
Рейтинг: 0 / 0
SELECT TAB1.*,SP.*
    #32041259
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда либо во временную таблицу складывай предварительно рассчитанные процедурой данные, либо крути сразу цикл и получай данные из ХП, а потом в запрос их подставляй...
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SELECT TAB1.*,SP.*
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]