如何在 Sql Server 的另一个过程中使用一个过程的结果?
Posted
技术标签:
【中文标题】如何在 Sql Server 的另一个过程中使用一个过程的结果?【英文标题】:How to use the result from a procedure in another procedure in SqlServer? 【发布时间】:2011-07-29 21:56:59 【问题描述】:我正在尝试将结果与一些 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 变量中。
【讨论】:
非常感谢,下次带你去我学校的咖啡厅^_^【参考方案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