2010-12-10 7 views
1

問題のコンテキスト:私はVisualStudioを2008を使用してデータセットを入力、executescalar() に「簡単に」アクセスを提供スカラーを実行最初recorsetの最初の行の最初のフィールドの値を返します(この最後の部分は、多くの場合、省略されています保存されたprocが中間レコードセットを返すのを防ぐには?

この動作に問題はほとんどの場合、あなたが最終select @returnValue文で返される値を計算前に、いくつかの他の要求を作りたいということです。

私の質問は一般的にどのようにSPが中間レコードセットを返さないようにしますか? (私はSET FMTONLY ON/OFFを試みたが、不要な側の動作を持っています)

別の関連質問です:どのように更新された行を返すから、T-SQL UPDATEステートメントを防ぐのですか?場合によっては、UPDATEを使用して簡単に更新することができます...

ありがとう!

サンプル:

が、これは私の問題であり、それは "@cを選択し、" 最初に解決することができる

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

BEGIN;しかし、私はあなたがレコーセット出力を無効にできるかどうか疑問に思っています。

+1

"あなたは他のリクエストをしたい" - あなたのここでの意味を説明するためにあなたのsprocsのコード例を表示してください – AakashM

+0

私は、あなたがアップデートで保存する値を計算し、その値を返したいこの場合、更新は最初に返されるレコードセット – oldbrazil

答えて

1

1 - ターゲットを持たないストアドプロシージャに複数のselect文を置かないでください。私。 SELECT 1,2,3を実行した後にSELECT 4,5,6を実行すると、2つのレコードセットが返されます。

2 - 更新を実行したときになぜレコードが戻ってくるのかわかりません。 SET NOCOUNT ONを設定して、 "xx rows affected"メッセージをオフにしてください。

+0

"SET NOCOUNT ON"が既に設定されています。返されたメッセージは問題ではありません。 "select @ var = somefunc(...")はレコードセットを返しませんし、レコードセットを必要としない場合はSELECTINGには意味がありませんが、更新ステートメントは問題です。あなたがあらかじめ選択できる既知の値で更新することを検討してください... – oldbrazil

+1

@oldbrazil - 何を元どおりに戻していますか? – JNK

関連する問題