设置@var = exec存储过程

时间:2011-03-25 23:04:54

标签: sql-server-2008 exec

是否可以在变量中为exec存储过程返回一个值?

这样的东西
DECLARE @count int
SET @count = Execute dbo.usp_GetCount @Id=123

3 个答案:

答案 0 :(得分:25)

您可以使用sp_executesql代替exec来分配标量输出参数

DECLARE @out int

EXEC sp_executesql N'select @out_param=10',
                   N'@out_param int OUTPUT',
                     @out_param=@out OUTPUT

SELECT @out

对于exec我只知道如何使用表变量

declare @out table
(
out int
)

insert into @out
exec('select 10')

select * 
from @out

对于存储过程,您还可以使用output参数或返回码。后者只能返回一个整数,通常首选返回错误代码而不是数据。下面将介绍这两种技术。

create proc #foo 
@out int output
as
set @out = 100
return 99

go

declare @out int, @return int

exec @return = #foo @out output

select @return as [@return], @out as [@out]

drop proc #foo

答案 1 :(得分:23)

如果在proc

中使用RETURN
DECLARE @count int
EXECUTE @count = dbo.usp_GetCount @Id=123

OUTPUT参数

DECLARE @count int
EXECUTE dbo.usp_GetCount @Id=123, @count OUTPUT

将结果重定向到临时表/表变量

DECLARE @count int
DECLARE @cache TABLE (CountCol int NOT NULL)
INSERT @cache EXECUTE dbo.usp_GetCount @Id=123
SELECT @count = CountCol FROM @cache

您不能将存储过程中的记录集直接分配给标量变量

答案 2 :(得分:10)

通常很多方法可以做到这一点,但最简单的方法是:

DECLARE @count int

Execute @count =  dbo.usp_GetCount @Id=123