Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SELECT TAB1.*,SP.* / 23 сообщений из 23, страница 1 из 1
06.08.2002, 11:05:37
    #32041106
Новичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
Каким образом возможно вернуть в селекте результат хранимой процедуры
Например: в качестве аргумента принимается значение поля таблицы, хранимая процедура (условно говоря) умножает его на два и необходимо получить в результирующем наборе вводимое поле и результат, обработанный процедурой
...
Рейтинг: 0 / 0
06.08.2002, 11:14:25
    #32041113
Новичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
Слабо?
...
Рейтинг: 0 / 0
06.08.2002, 11:25:04
    #32041119
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
Верни пустой селект(рекордсет) и отлови его
...
Рейтинг: 0 / 0
06.08.2002, 11:25:49
    #32041120
Artem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
Это можно реализовать в виде INLINE - UDF (пользовательских функций)
смотри BOL
...
Рейтинг: 0 / 0
06.08.2002, 11:40:19
    #32041131
Новичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
А попроще?
...
Рейтинг: 0 / 0
06.08.2002, 11:47:23
    #32041137
snake
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
куда еще проще UDF???
...
Рейтинг: 0 / 0
06.08.2002, 12:06:04
    #32041148
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
не думаю, что такой вариант будет работоспособен,
тому есть несколько причин с моей точки зрения. Могу и ошибаться.

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

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

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

ну и дальше...
кстати, мне самому было бы интересно, что скажут гуру на эту тему, т.к. проблема, подбная указанной у меня уже появлялась
...
Рейтинг: 0 / 0
06.08.2002, 12:06:22
    #32041150
Новичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
а как?
...
Рейтинг: 0 / 0
06.08.2002, 12:21:44
    #32041166
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
с UDF работает все нормально, просто и красиво
...
Рейтинг: 0 / 0
06.08.2002, 12:28:38
    #32041170
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
С помощью динамического 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
06.08.2002, 12:38:48
    #32041178
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT TAB1.*,SP.*
2AVL

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

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

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

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


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


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