いずれにせよ、ストアド プロシージャ パラメータの 1 つをオプションとして設定できるかどうかを知りたいです。
IF @thing_id <> ''
BEGIN
SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' + CONVERT(VARCHAR,@thing_id)
END
いずれにせよ、ストアド プロシージャ パラメータの 1 つをオプションとして設定できるかどうかを知りたいです。
IF @thing_id <> ''
BEGIN
SET @sFiltre = @sFiltre + ' AND OPERES.OPE_THING = ' + CONVERT(VARCHAR,@thing_id)
END
ストアドプロシージャを作成するときは、このように作成します
Create Proc MyProc
@Param1 VarChar (20),
@Param2 VarChar (20) = NULL
AS
-- Your code here
GO
Param1 は必須です
Param2 はオプションです
ストアド プロシージャ パラメータにデフォルト値を指定すると、オプションになります。
編集:
CREATE PROC [EDURE] [所有者。]
手続き名 [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]デフォルト
パラメータのデフォルト値です。デフォルトが定義されている場合、そのパラメーターの値を指定せずにプロシージャーを実行できます。デフォルトは定数である必要があり、NULL にすることもできます。プロシージャーがパラメーターを LIKE キーワードと共に使用する場合は、ワイルドカード文字 (%、_、[]、および [^]) を含めることができます。
SQL Server のドキュメント: パラメータの既定値の指定を参照してください。
はい。パラメータ リストの最後に「オプションの」パラメータをリストし、デフォルト値 (通常は NULL) を指定します。
CREATE PROCEDURE MyProcedure
@param1 int,
@param2 varchar(200),
@thing_id int = NULL
AS
If @thing_id IS NULL Begin
/* ... */
End
END
コードがもたらす SQL インジェクションの喜びは別として、そうできます。パラメータのデフォルト値を設定できます
CREATE PROCEDURE DoStuff @param1 varchar(20) = null
次に、ストアドプロシージャ内
IF @param1 IS NOT NULL
BEGIN
... Do stuff
END
デフォルト値は好きな値に設定できます。
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 インジェクション