如何在 Sql Server 的另一个过程中使用一个过程的结果?

Posted

技术标签:

【中文标题】如何在 Sql Server 的另一个过程中使用一个过程的结果?【英文标题】:How to use the result from a procedure in another procedure in SqlServer? 【发布时间】:2011-07-29 21:56:59 【问题描述】:

我正在尝试将结果与一些 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

【问题讨论】:

【参考方案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)返回其结果时才有效。如果它当前正在返回,例如包含标量值的单行/列值,此方法将不起作用。

以上是关于如何在 Sql Server 的另一个过程中使用一个过程的结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SQL Server 中的另一个数据库中选择表的数据?

当用户在 MS Access 中修改表中的另一列时,如何在 SQL Server 中将列设置为今天的日期 [关闭]

SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0 - 管道的另一端上无任何进程。(

sql server 2008启动时:已成功与服务器建立连接,但是在登录过程中发生错误。(provider:命名管道提供程序,error:0-管道的另一端上无任何进程。)(Microsoft SQL

关于使用sql server 2008触发器完成修改一张表里一个字段同时修改另一张表的另一字段

如何在 Sql Server 2008 R2 存储过程中搜索字符串?