Динамический запрос возвращающий одно значение

slivka_83
Дата: 07.06.2011 10:45:45
Дорый день!

Такая проблема: мне необходимо в селекте вызвать функцию, в которую передать три параметра. Из этих трех параметров динамически сформировать новый SELECT, который отберет одно значение и вернет в первый селект :) Такое возможно? :)
Glory
Дата: 07.06.2011 10:46:52
В функциях запрещены динамические запросы
slivka_83
Дата: 07.06.2011 10:48:28
Glory
В функциях запрещены динамические запросы

Я уже это заметил :) потому и пишу сюда... может есть какие-то воркэраунды... :)
Glory
Дата: 07.06.2011 10:56:04
slivka_83
Glory
В функциях запрещены динамические запросы

Я уже это заметил :) потому и пишу сюда... может есть какие-то воркэраунды... :)

В хелпе ясно и однозначно сказано - динамические запросы специально запрещены разработчиками, а не потому, что так получилось. Поэтому никаких "лючков" нет и не будет
Гадя Петрович
Дата: 07.06.2011 11:01:24
Glory,

можно, кстати, ссыль на этот хелп?
не могу найти
slivka_83
Дата: 07.06.2011 11:02:19
Glory,

Я поппытался сделать этого через курсор и процедуру. Т.е. весь первый селект засунул во временную таблицу. Эту временную таблицу просматриваю построчно в курсоре. Затем для каждой строки вызываю процедуру с передачей ей трех параметров:

DECLARE @curValue varchar(500)
EXECUTE @curValue = curValue @Object, @Field, @Id

После чего обновляю текущую строчку во временной таблице...
UPDATE #tlog
SET newValue = @curValue
WHERE RecordId = @Id

Одна проблема... на каждый EXECUTE в студии отдельный результат :) можно хоть это как то обойти? :)
Glory
Дата: 07.06.2011 11:04:32
slivka_83

Одна проблема... на каждый EXECUTE в студии отдельный результат :) можно хоть это как то обойти? :)

Написать процедуру так, чтобы она выдавала только нужные вам результаты
И не надо возвращать из процедуры значения через RETURN
slivka_83
Дата: 07.06.2011 11:07:38
Glory
slivka_83
Одна проблема... на каждый EXECUTE в студии отдельный результат :) можно хоть это как то обойти? :)

Написать процедуру так, чтобы она выдавала только нужные вам результаты
И не надо возвращать из процедуры значения через RETURN


Спасибо за помощь :) Процедура вытаскивает то что мне нужно и RETURN в ней не используется:

ALTER PROCEDURE [dbo].[curValue]
@Table VARCHAR(100),
@Field VARCHAR(100),
@RecordId VARCHAR(100)
AS
BEGIN
DECLARE @req VARCHAR(8000) = 'SELECT ' + @Field + ' FROM ' + @Table + ' WHERE ' + @Table + 'id = ''' + @RecordId + ''''
EXEC (@req)
END

но все равно каждый EXECUTE выдает отдельный результат :)
Glory
Дата: 07.06.2011 11:11:05
slivka_83

но все равно каждый EXECUTE выдает отдельный результат :)

А что вы хотели, чтобы было результатом SELECT-а в вашей процедуре ?
Вы для чего его там написали ?

slivka_83
и RETURN в ней не используется:

Еще круче
А что вы тогда получаете в EXECUTE @curValue = curValue ?
slivka_83
Дата: 07.06.2011 11:16:50
Glory
slivka_83
но все равно каждый EXECUTE выдает отдельный результат :)

А что вы хотели, чтобы было результатом SELECT-а в вашей процедуре ?
Вы для чего его там написали?

Результатом мне нужно значение одного поля, которое и вытаскивает селект в процедуре. Его мне нужно вернуть в то место откуда процедура вызвана :)
Glory
slivka_83
и RETURN в ней не используется:

Еще круче
А что вы тогда получаете в EXECUTE @curValue = curValue ?


Извините, но боюсь что я не понимаю что Вы имеете ввиду :) Если не использовать EXECUTE, то как обратиться к процедуре? :)