2017-04-21 1 views
2

ユーザーはSQLストアドプロシージャのストアドプロシージャ値の値を渡すことがあります。ストアドプロシージャのパラメータを設定する方法は、ユーザーによって値が渡される場合とされない場合があります。

したがって、StoredProcedureでの変数の宣言方法とWhere句の定義方法はありますか。

CREATE PROC spGetRecord 
@Storeid nchar(10)=null 
AS 
BEGIN 
    SELECT ID,NAME 
    FROM table1 
    WHERE [email protected] //@Storeid is may pass the value by user or may not 
END 

それでは、どのように私は私はあなたが...

を検索手順のいくつかの並べ替えを構築している推測しています句

おかげ

答えて

2

@Storeidを定義する必要があります単純な開始で、パラメータがStoreidと一致するか、t彼パラメータがnullです:

より高度なキャッチすべての検索クエリに対して
create proc spGetRecord (@Storeid nchar(10)=null) as 
begin 
    set nocount, xact_abort on; 

    select id,name 
    from table1 
    where ([email protected] or @Storeid is null) 
end; 

、以下を参照してください。

+0

この行の説明を与えることができます 'set nocount、xact_abort on;'? –

+2

@mohamedfaiz最も良い説明はここにあります:[あなたはいつも 'set xact_abort、nocount on;' - Erland Sommarskog '(http://www.sommarskog.se/error_handling/Part1.html#jumpXACT_ABORT)を含めるべきです。それは、多くの理由であなたの手順にそれを含めるのが良い習慣(イホのベストプラクティス)です。確かに、 'select'オペレーションのために' xact_abort'は必要ないでしょうが、それは害はありません。 'nocount'は(影響を受けた1行のような)メッセージを抑制します。ネットワークトラフィックが増えたためにアプリケーションのパフォーマンスが低下します。 – SqlZim

関連する問題