Sql server 从存储过程获取返回值

Sql server 从存储过程获取返回值,sql-server,stored-procedures,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_be

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

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。但在我的例子中,我确保查询始终只返回一个

我也尝试过在谷歌上找到以下代码:

EXEC @artgrp = sp_executesql @query_bereich
但这也不起作用


有人能帮我吗?

如果只需要返回标量值(即:不复杂),那么应该使用sql函数

请看这里:


存储过程只返回受其调用影响的数据库行数。这就是为什么在您的示例中,过程返回0。

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

这里有一种方法,使用
sp_executesql
,并假设
@artgrp
的类型是
varchar(50)


sp_executesql过程已经由MSSQL服务器提供。不是我自己写的。它所做的是执行我以前定义的查询,这样我就可以拥有动态列名。答案就在这里:您调用的过程用于更改数据(插入、更新、删除)的查询,其返回值为0表示成功,其他值表示失败。返回的0表示选择成功,这当然对您没有帮助。所以你应该寻找另一种方法,就是这样。我忘记了参数和输出的全部内容。
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