2012-09-26 161 views
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。但在我的情況下,我已確保查詢總是隻返回一個。

我也曾嘗試foillowing代碼,我在谷歌發現:

EXEC @artgrp = sp_executesql @query_bereich 

但這絲毫也不起作用。

任何人都可以幫助我嗎?

回答

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 
+0

就是這樣。我用參數和OUTPUT把整個事情都忘了。 –

0

如果您只需要返回標量值(即:沒有任何複雜的),則應該使用sql函數。

在這裏看到:MSDN

一個存儲過程只是返回數據庫中的行數,但如受它的呼叫。這就是爲什麼在你的情況下,程序返回0.

+0

sp_executesql過程已經被MSSQL Server提供一個。我沒有自己寫。它所做的是執行一個我以前定義的查詢,這樣我就可以擁有動態列名稱。 –

+0

啊,對不起,我誤解了你的問題。 – LuigiEdlCarno

+0

答案在於:[鏈接](http://msdn.microsoft.com/de-de/library/ms188001.aspx)您調用的過程適用於更改數據(插入,更新,刪除)的查詢成功返回值爲0,失敗則返回其他值。返回的0意味着選擇成功,這當然不會幫助你。所以你應該尋找另一種方式來做到這一點 – LuigiEdlCarno