2017-11-28 17 views
-1

ストアドプロシージャにNULLSを受け入れるが、それはNULL値を渡すことができます。私は非常に簡単で、以下のストアドプロシージャを持っている

私はただのベストプラクティスは、ここには何か思ったんだけど、どのように対処しますこのような場合にはNULLを使用しますか?

ALTER PROCEDURE [dbo].[spGetClient] 
    @ClientID int 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 
     ...... 
    FROM 
     Client 
    WHERE 
     ClientID = @ClientID 
+0

手順を掲載ルックスとあなたがnull値を渡ししようとした場合、それはエラーがスローされますように。 –

+2

spはNULL値で正常に実行されます。 – Philip

+2

'NULL'との比較が決して真ではないので、' NULL'値が与えられたとき、クエリは行を返すことはありません。 ClientIDがプライマリキーである可能性があります。この場合、NULLはとにかく許可されません。 NULLが指定されているときにエラーを発生させますか? –

答えて

0

最も簡単な方法は、ちょうどNOT NULLとして引数を宣言するために、次のようになります。

ALTER PROCEDURE [dbo].[spGetClient] (
    @ClientID int NOT NULL 
) 
. . . 

しかし、それは非常にすべてのストアドプロシージャのために許可されていません。

ストアドプロシージャは正常です。 NULLの値が渡された場合は、行が返されません。これは妥当と思われます。ClientIdは恐らく決してNULLClientテーブルにないため、問題はありません。

+0

NULLとして定義すると、このエラーがスローされます。メッセージ11555、レベル15、状態1、プロシージャspGetClient、行8 [バッチ開始行7] パラメータ '@ClientID'はNOT NULLとして宣言されています。 NOT NULLパラメータは、インラインテーブル値関数を除き、ネイティブにコンパイルされたモジュールでのみサポートされます。 – Philip

+0

それは正しいです。 ClientIDはテーブルの主キーです。私はちょうどこれのような場合のベストプラクティスについて懸念していました。 – Philip

2

は、カスタムエラーを発生させることができます。

ALTER PROCEDURE [dbo].[spGetClient] 
    @ClientID int 
AS 
BEGIN 
    SET NOCOUNT ON; 

    if @ClientID is null 
    BEGIN 
      raiserror('The value for ClientID should not be null', 15, 1) 
      return; 
    END 
    SELECT 
     ...... 
    FROM 
     Client 
    WHERE 
     ClientID = @ClientID 
+1

は 'return'で終了し、それ以外の場合は' select..'になります。 –

+0

@YogeshSharma:SPを停止してさらに実行するための戻り値が追加されました。 –

+0

入力を感謝します@NiranjanRajawat – Philip

関連する問題