2009-10-05 22 views

答えて

7

ストアドプロシージャのパラメータにデフォルト値を指定すると、オプションになります。

EDIT:

PROC [EDURE] [所有者を作成します。 ]
procedure_name [;数]
[{@parameterのDATA_TYPE}
[VARYING] [=初期値] [OUTPUT]
] [、... n]は

は、パラメータのデフォルト値である

デフォルト設定されます。 デフォルトが定義されている場合、 プロシージャは、そのパラメータに 値を指定せずに実行できます。デフォルトの は定数でなければならず、NULLでもかまいません。 プロシージャがLIKEキーワードでパラメータを使用する場合は、ワイルドカード文字(%、 _、[]および[^])を含めることができます。

ご覧ください

- http://msdn.microsoft.com/en-us/library/aa258259%28SQL.80%29.aspx

3

はい。ストアドプロシージャを作成する場合

CREATE PROCEDURE MyProcedure 
    @param1 int, 
    @param2 varchar(200), 
    @thing_id int = NULL 
AS 

    If @thing_id IS NULL Begin 
     /* ... */ 
    End 

END 
+0

@Joel:それは終わりに向かって、オプションのパラメータを持つことが必要ですか?私は、ユーザビリティの観点からそれを行う方が良いと思います。そうですか? – shahkalpesh

+0

いいえ、間違いなくベストプラクティスです。 –

14

は、この

Create Proc MyProc 
@Param1 VarChar (20), 
@Param2 VarChar (20) = NULL 
AS 

-- Your code here 

GO 

Param1のようにそれを作成している:リストパラメータリストの最後にある「オプション」のパラメータとは、彼らにデフォルト値(通常はNULL)を得ました必須

PARAM2はイエスのことができ、そのコードがもたらすSQLインジェクションの喜びをさておき

+0

Rajありがとうございます。それは簡単でした –

0

オプションです。あなたは、ストアドプロシージャ

IF @param1 IS NOT NULL 
BEGIN 
    ... Do stuff 
END 

の内側にあなたが好きなものであることを、デフォルト値を設定することができそして、パラメータ

CREATE PROCEDURE DoStuff @param1 varchar(20) = null 

のデフォルト値を設定することができます。

0
CREATE PROCEDURE SQL_INJECTION(
@MandatoryA int, 
@MandatoryB varchar(50), 
@MandatoryC datetime, 
@OptionalA varchar(50) = NULL 
) 
AS 

-- PUT YOUR DYNAMIC SQL HERE 

GO 

を呼び出すには

EXEC dbo.SQL_INJECTION @MandatoryA = 1, @MandatoryB = 'test', @MandatoryC = '2009-10-05', @OptionalA = DEFAULT 

注1:動的SQL = SQLインジェクション

+0

"動的SQL = SQL注入"は必ずしも真ではありません。ユーザーが指定した値を使用して動的SQL文字列を構築するかどうかによって異なります。ストアドプロシージャ内のロジックのみに基づいて動的SQL文字列を簡単に作成し、ユーザー指定の値をパラメータを使用して動的ステートメントに渡すことができます。OPのコードはSQLインジェクションに対してオープンされていましたが、すべてのダイナミックSQLがオープンしているとは限りません。 – nicko

関連する問題