#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). Если в данный момент она возвращает, например, значение одной строки / столбца, содержащее скалярное значение, этот метод не будет работать.