Как использовать результат процедуры в другой процедуре на SQLServer?

#sql-server #tsql #procedure

#sql-server #tsql #процедура

Вопрос:

Я пытаюсь объединить результат, смешанный с некоторыми SELECT s.
Я хотел установить @result в сочетании с результатом [proc_Get_Frame_CourseNum] процедуры, но это не сработало.

 declare @str varchar(300)
declare @result varchar(200)
declare @temp varchar(20)
declare @i int
set @str='110,120,130,140'
set @result=''
set @temp=''
set @i=0
while @i<len(@str)/4 1
begin
    set @temp=substring(@str,1,3)
    set @str=substring(@str,2,len(@str))
    set @result=@result   exec [proc_Get_Frame_CourseNum] @temp 
    set @i=@i 1
end
select @temp
  

Ответ №1:

Лично я бы использовал выходные переменные

 CREATE PROCEDURE proc_Get_Frame_CourseNum
    @temp varchar(20),
    @outValue varchar(50) OUTPUT
AS
BEGIN
    --do stuff

    --before you leave the method or do your final SELECT
    SET @outValue = 'whatever your result is'

    --more stuff
END
  

Затем в вашем коде вы просто переходите:

 DECLARE @outValue VARCHAR(20)

-- rest of your code

EXEC [proc_Get_Frame_CourseNum] @temp, @outValue OUT
SET @result = @result   @outValue
  

В качестве альтернативы вы могли бы просто сбросить результаты SP во временную таблицу, а затем прочитать из нее в вашу переменную @Result .

Комментарии:

1. Большое вам спасибо, в следующий раз я приведу вас в кафе моей школы ^_^

Ответ №2:

Вы не можете интерполировать результат одной процедуры, добавив его. Теперь я предполагаю, что [proc_Get_Frame_CourseNum] возвращает скалярный результат.

Итак, запустите exec [proc_Get_Frame_CourseNum] @temp в другой строке пакета (перед установкой @result = @result вызов)

Ваш запрос должен выглядеть следующим образом,

объявить @scalarResult = exec [proc_Get_Frame_CourseNum] @temp
установить @result=@result @scalarResult

Комментарии:

1. Значением exec является код возврата (типа int) из процедуры. Это сработает, только если proc_Get_Frame_CourseNum возвращает свой результат с помощью return инструкции (и это int). Если в данный момент она возвращает, например, значение одной строки / столбца, содержащее скалярное значение, этот метод не будет работать.