TSQL - передача полей из таблицы в хранимую процедуру, а затем сохранение результата во временной таблице

Я работаю с клиентом, у которого есть хранимая процедура с дюжиной параметров.

Мне нужно получить значения параметров из таблиц в базе данных, а затем передать их в хранимую процедуру, чтобы получить числовое значение. Затем мне нужно присоединить это значение к оператору SELECT.

Я знаю, что мне нужно создать временную таблицу, чтобы соединить результаты SP с моим оператором select, но это все для меня новое, и мне может понадобиться некоторая помощь. Основное внимание уделяется тому, как передавать значения полей в SP. Я также хотел бы, чтобы таблица Temp содержала пару параметров в виде полей, чтобы я мог присоединиться к ней в своем операторе select.

любая помощь приветствуется.

Спасибо


person user1440675    schedule 28.08.2012    source источник


Ответы (2)


Вы можете зафиксировать значения параметров в объявленных переменных. Что-то типа:

DECLARE @Parm1 int, @Parm2 varchar(50) -- Use appropriate names and datatypes

SELECT @Parm1 = Parm1ColumnName, @Parm2=Parm2ColumnName
FROM TableWithParmValues
-- Include a WHERE condition if appropriate

DECLARE @ProcOutput TABLE(outputvalue int) -- use appropriate names and datatypes to match output

INSERT @ProcOuptut
EXECUTE MyProc @ProcParm1 = @Parm1, @ProcParm2 = @Parm2 -- Use appropriate names

Затем используйте временную таблицу @ProcOutput и переменные параметров, которые вам нужны, с вашим SELECT.

person GilM    schedule 28.08.2012
comment
Это круто. Придется ли мне делать какой-то цикл для прохождения каждого набора значений столбца, или этот код уже сделает это? - person user1440675; 28.08.2012
comment
INSERT/EXECUTE получит все строки (из первого набора результатов) и поместит их в @ProcOutput, поэтому для этого вам не понадобится цикл. Если вам нужно вызвать хранимую процедуру несколько раз с несколькими наборами параметров, то для этого вам понадобится цикл. - person GilM; 28.08.2012

Этот комментарий лучше отформатировать как ответ.

Вам не нужно создавать временную таблицу или табличную переменную, чтобы иметь возможность соединить числовой результат с другими данными. Ниже демонстрируются различные курьезы с использованием SELECTs без явного создания каких-либо таблиц:

declare @Footy as VarChar(16) = 'soccer'
select * from (
  select 'a' as Thing, 42 as Thingosity
  union all
  select *
    from ( values ( 'b', 2 ), ( 'c', 3 ), ( @Footy, Len( @Footy ) ) ) as Placeholder ( Thing, Thingosity )
  ) as Ethel cross join
  ( select 42 as TheAnswer ) as Fred
person HABO    schedule 28.08.2012