私はストアドプロシージャのパラメータのいずれかをオプションとして設定できますかどうかを知りたいと思います。SQL Server:ストアドプロシージャ内のオプションの変数
IF @thing_id <> ''
BEGIN
SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' + CONVERT(VARCHAR,@thing_id)
END
私はストアドプロシージャのパラメータのいずれかをオプションとして設定できますかどうかを知りたいと思います。SQL Server:ストアドプロシージャ内のオプションの変数
IF @thing_id <> ''
BEGIN
SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' + CONVERT(VARCHAR,@thing_id)
END
ストアドプロシージャのパラメータにデフォルト値を指定すると、オプションになります。
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はい。ストアドプロシージャを作成する場合
CREATE PROCEDURE MyProcedure
@param1 int,
@param2 varchar(200),
@thing_id int = NULL
AS
If @thing_id IS NULL Begin
/* ... */
End
END
は、この
Create Proc MyProc
@Param1 VarChar (20),
@Param2 VarChar (20) = NULL
AS
-- Your code here
GO
Param1のようにそれを作成している:リストパラメータリストの最後にある「オプション」のパラメータとは、彼らにデフォルト値(通常はNULL)を得ました必須
PARAM2はイエスのことができ、そのコードがもたらすSQLインジェクションの喜びをさておき
Rajありがとうございます。それは簡単でした –
オプションです。あなたは、ストアドプロシージャ
IF @param1 IS NOT NULL
BEGIN
... Do stuff
END
の内側にあなたが好きなものであることを、デフォルト値を設定することができそして、パラメータ
CREATE PROCEDURE DoStuff @param1 varchar(20) = null
のデフォルト値を設定することができます。
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インジェクション
"動的SQL = SQL注入"は必ずしも真ではありません。ユーザーが指定した値を使用して動的SQL文字列を構築するかどうかによって異なります。ストアドプロシージャ内のロジックのみに基づいて動的SQL文字列を簡単に作成し、ユーザー指定の値をパラメータを使用して動的ステートメントに渡すことができます。OPのコードはSQLインジェクションに対してオープンされていましたが、すべてのダイナミックSQLがオープンしているとは限りません。 – nicko
@Joel:それは終わりに向かって、オプションのパラメータを持つことが必要ですか?私は、ユーザビリティの観点からそれを行う方が良いと思います。そうですか? – shahkalpesh
いいえ、間違いなくベストプラクティスです。 –