1

executescalar() 問題のコンテキスト: VisualStudio 2008 と型指定されたデータセットを使用します。これにより、実行スカラーへの「簡単な」アクセスが提供され、最初の recorsetの最初の行の最初のフィールドの値が返されます(この最後の部分はしばしば省略されます) 。

この動作の問題は、ほとんどの場合、最終ステートメントで返される値を計算する前に、他の要求を行いたいことです。select @returnValue

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

もう 1 つの関連する質問は、T-SQL UPDATE ステートメントが更新された行を返さないようにするにはどうすればよいかということです。UPDATE を使用して単純に UPDATE ...

ありがとう!

サンプル:

始める

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

終わり

これは私の問題であり、最初の「select @c」で解決できます。それでも、recorsetの出力を無効にできるかどうかは疑問です....

4

1 に答える 1

1

1 - ターゲットのないストアド プロシージャに複数の select ステートメントを含めないでください。つまり、実行するSELECT 1,2,3と、SELECT 4,5,62 つのレコードセットが返されます。

2 - 更新を実行するとレコードが返される理由がわかりません。SET NOCOUNT ON「xx 行が影響を受けました」というメッセージをオフに設定してみてください。

于 2010-12-10T14:26:06.470 に答える