【问题标题】:How to use the result from a procedure in another procedure in SqlServer?如何在 Sql Server 的另一个过程中使用一个过程的结果?
【发布时间】:2025-12-10 11:50:01
【问题描述】:

我正在尝试将结果与一些 SELECTs 混合在一起。
我想将@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

【问题讨论】:

    标签: sql-server tsql procedure


    【解决方案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 变量中。

    【讨论】:

    • 非常感谢,下次带你去我学校的咖啡厅^_^
    【解决方案2】:

    您不能通过附加一个过程的结果来对其进行插值。 我现在假设 [proc_Get_Frame_CourseNum] 返回一个标量结果。

    所以在另一行批处理中运行exec [proc_Get_Frame_CourseNum] @temp(在设置@result = @result + call之前)

    您的查询应该是这样的,

    声明@scalarResult = exec [proc_Get_Frame_CourseNum] @temp
    设置@result=@result+ @scalarResult

    【讨论】:

    • exec 的值是过程的返回码(int 类型)。这仅在proc_Get_Frame_CourseNum 使用return 语句(并且它是一个int)返回其结果时才有效。如果它当前正在返回,例如包含标量值的单行/列值,此方法将不起作用。
    最近更新 更多