从存储过程获取返回值

时间:2012-09-26 10:50:19

标签: sql-server stored-procedures

我有一个项目需要保存存储过程的返回值。

declare @query_bereich nvarchar(500)

SET @query_bereich = 'select bereich' + convert(varchar(2), @bereich) +
                     ' from ImpArtGruppe where Artikelnummer = ' + @artnum 

set @artgrp = (EXEC sp_executesql @query_bereich)
select @artgrp = ISNULL(@artgrp, '')
select @artgrp

现在我遇到的问题是,返回值始终为0.我猜这是默认情况,因为在另一种情况下,这将是一个可以有多个值的restulset。但在我的情况下,我确保查询始终只返回一个。

我也尝试过在google上找到的代码:

EXEC @artgrp = sp_executesql @query_bereich

但这也行不通。

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:2)

示例代码中没有存储过程。看起来您正在构建动态T-SQL查询,并希望存储该结果。

以下是一种方法,使用sp_executesql,并假设@artgrp的类型为varchar(50)

declare @query_bereich nvarchar(max)
set @query_bereich = 'select @artgrp = bereich' + convert(varchar(2),@bereich) +
    ' from ImpArtGruppe where Artikelnummer = ''' + @artnum + ''''
declare @artgrp varchar(50)
exec sp_executesql @query_bereich, '@artgrp varchar(50) output', @artgrp output

答案 1 :(得分:0)

如果你只需要返回标量值(即:没有任何复杂的),你应该使用sql函数。

见这里:MSDN

存储过程只返回受其调用影响的数据库行数。这就是为什么在你的情况下程序返回0。