2010-12-10 93 views
1

問題背景:我用2008年的VisualStudio和類型化數據集,它提供一種「輕鬆」獲得executescalar() 執行標返回第一recorset最後一部分的第一行的第一個字段的值,而經常忽略如何防止存儲過程返回中間記錄集?

這種行爲的問題是最經常要進行一些其他要求你計算值前與最終select @returnValue語句返回。

所以我的問題是,一般來說,如何防止SP返回中間記錄集? (我試過SET FMTONLY ON/OFF,但有不必要的副作用行爲)

另一個相關的問題是:你怎麼阻止T-SQL UPDATE語句從返回更新的行?有時你使用更新來簡單地更新...

謝謝!

樣本:

BEGIN

SET NOCOUNT ON; 

declare @c int 
select @c=(select count(*) from work where ...) 
select @c -- so ExecuteScalar() works 
update sousblocs set myfield = @c 
     where ... 

select @c --after the update, won't be seen by ExecuteScalar() 
return @c --useless for ExecuteScalar 

END

這是我的問題,它可以與第一個 「選擇@c」 來解決;但我不知道你是否可以禁用recorset輸出....

+1

「你想提出一些其他請求」 - 請向我們展示一些示例代碼,以說明你在這裏的意思 – AakashM 2010-12-10 14:13:50

+0

我的意思是,例如,你計算一個存儲更新的值,而你想要返回該值。在這種情況下,更新將成爲第一個要返回的記錄集 – oldbrazil 2010-12-10 14:20:51

回答

1

1 - 在沒有目標的存儲過程中沒有多個select語句。即如果您運行SELECT 1,2,3,然後運行SELECT 4,5,6它將返回2個記錄集。

2 - 我不確定爲什麼當您運行更新時將記錄恢復。嘗試設置SET NOCOUNT ON以關閉「受影響的xx行」消息。

+0

「SET NOCOUNT ON」已設置。返回的消息不是問題。像「select @ var = somefunc(...」)這樣的語句不會返回記錄集,如果你不需要記錄集,那麼在SELECTING中沒有意義,這是正確的,但是更新語句是個問題......除非你考慮你更新一個已知的價值,你可以事先選擇... – oldbrazil 2010-12-10 14:28:36

+1

@oldbrazil - 你準確回來了什麼? – JNK 2010-12-10 14:29:51

相關問題