0

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

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

但这也不起作用。

谁能帮我这个?

4

2 回答 2

2

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

这是一种方法,使用sp_executesql,并假设类型@artgrpvarchar(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
于 2012-09-26T11:00:38.210 回答
0

如果您只需要返回标量值(即:没有什么复杂的),您应该使用 sql 函数来代替。

见这里:MSDN

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

于 2012-09-26T10:57:05.723 回答