2016-04-28 15 views
1

IDが主キーで次のようなものを、考えると、行が返されない場合のSELECT INTO出力パラメータ?何行が指定された主キー(<code>ID</code>)に存在しない場合

CREATE PROCEDURE Test 
@ID INT, 
@RetVal INT OUT 
AS BEGIN 
Select @RetVal = Column1 FROM Table1 WHERE ID = @ID; 
END 

はどうなりますか? @RetValが不特定の状態で残るか、失敗するか?

また、プロシージャの呼び出し元は、これをどのように知ることができますか?

答えて

5

変数(またはこの場合のパラメータ)は、前にあった値を持ち、割り当てが行われません。

プロシージャの呼び出し側が、パラメータに値として明示的に他のものを渡していない場合は、nullになります。

文の直後に@@rowcountをチェックすると、いくつの行が含まれているかを確認できます。 0が割り当てられていない場合、1より大きい場合、実際に割り当てられた可能性のある値のどれが不確定であるかは不確定です。

ゼロ行が一致した場合はnullを上書きし(既存の値を上書きする)、複数の場合はエラーをスローすることができます。

Set @RetVal = (SELECT Column1 FROM Table1 WHERE ID = @ID); 

はまた、DBAサイトWhere do this Constant Scan and Left Outer Join come from in a trivial SELECT query plan?

+1

でこの最近の答えを見て@Retvalが割り当てられていないだった場合、それは 'NULL'を返します。 –

関連する問題