SQL Serverストアドプロシージャパラメーター
前のチュートリアルでは、SELECT
ステートメントをラップする単純なストアドプロシージャを作成する方法について説明しました。 このストアドプロシージャを呼び出すと、単にクエリを実行して結果セットを返すだけです。
このチュートリアルでは、我々はあなたがそれに一つ以上の値を渡すことができますストアドプロシージャを拡張します。 ストアドプロシージャの結果は、パラメーターの値に基づいて変更されます。,H2>
次のクエリは、サンプルデータベース内のproducts
テーブルから製品リストを返します。
CREATE PROCEDURE
ステートメントを使用して、このクエリをラップするストアドプロシージャを作成できます。
Code language: SQL (Structured Query Language) (sql)
ただし、今回はストアドプロシージャにパラメータを追加して、サンプルデータベース内のproducts
テーブルから製品リストを返します。まず、@min_list_price
という名前のパラメーターをuspFindProducts
ストアドプロシージャに追加しました。, すべてのパラメータは、@
記号で始まる必要があります。 AS DECIMAL
キーワードは、@min_list_price
パラメーターのデータ型を指定します。 パラメーターは、開始かっこと終了かっこで囲む必要があります。
@min_list_price
パラメータをWHERE
SELECT
ステートメントの句で使用し、定価が@min_list_price
以上の製品のみをフィルタリングしました。,一つのパラメータでストアドプロシージャを実行する
uspFindProducts
ストアドプロシージャを実行するには、次のように引数を渡します。
Code language: SQL (Structured Query Language) (sql)
ストアドプロシージャは、定価が100以上のすべての製品を返します。,
引数を200に変更すると、別の結果セットが得られます。
Code language: SQL (Structured Query Language) (sql)
複数のパラメーターを持つストアドプロシージャの作成
ストアドプロシージャは、一つ以上のパラメーターを取ることができます。 パラメーターはカンマで区切られます。,iv>ストアドプロシージャに@max_list_price
という名前のパラメータを追加することにより、
ストアドプロシージャが正常に変更されたら、@min_list_price
と@max_list_price
:
Code language: SQL (Structured Query Language) (sql)
次の出力を示します。
名前付きパラメーターの使用
ストアドプロシージャに複数のパラメーターがある場合は、名前付きパラメーターを使用してストアドプロシージャ,
たとえば、次のステートメントは、名前付きパラメータ@min_list_price
および@max_list_price
を使用してuspFindProducts
ストアドプロシージャを実行します。
Code language: SQL (Structured Query Language) (sql)
ストアドプロシージャの結果は同じですが、ステートメントはより明白です。
テキストパラメーターの作成
次のステートメントは、@name
パラメーターを文字列パラメーターとしてストアドプロシージャに追加します。,
WHERE
SELECT
ステートメントの
句に、次の条件を追加しました。
Code language: SQL (Structured Query Language) (sql)
これにより、ストアドプロシージャは定価が最小および最大定価の範囲にある製品を返し、製品名には渡すテキストも含まれます。,
このステートメントでは、uspFindProducts
ストアドプロシージャを使用して、定価が900と1,000の範囲にあり、その名前にTrek
という単語が含まれて,
次の図は出力を示しています。
オプションパラメータの作成
uspFindProducts
ストアドプロシージャを実行するときは、三つのパラメータに対応するすべての引数を渡す必要があります。
SQL Serverでは、パラメーターの既定値を指定できるため、ストアドプロシージャを呼び出すときに、既定値のパラメーターをスキップできます。,このストアドプロシージャでは、0
を@min_list_price
パラメーターのデフォルト値として、999,999
を@max_list_price
パラメーターのデフォルト値として割り当てました。,
Once the stored procedure is compiled, you can execute it without passing the arguments to @min_list_price
and @max_list_price
parameters:
Code language: SQL (Structured Query Language) (sql)
In this case, the stored procedure used 0
for @min_list_price
parameter and 999,999
for the @max_list_price
parameter when it executed the query.,
@min_list_price
および@max_list_price
パラメータはオプションパラメータと呼ばれます。
もちろん、オプションのパラメーターに引数を渡すこともできます。, たとえば、次のステートメントは、定価が6,000
以上で、名前に単語Trek
が含まれるすべての製品を返します。
Code language: SQL (Structured Query Language) (sql)
デフォルト値としてnullを使用
uspFindProducts
ストアドプロシージャでは、999,999
デフォルトの最大リスト価格として使用しました。 将来的には、それよりも大きい定価を持つ製品があるかもしれないので、これは堅牢ではありません。,
これを回避する一般的な手法は、パラメータのデフォルト値としてNULL
を使用することです。
WHERE
句で、NULL
@max_list_price
パラメータの値を処理するように条件を変更しました。
Code language: SQL (Structured Query Language) (sql)
次のステートメントは、uspFindProducts
ストアドプロシージャを実行して、定価が500以上で、名前にHaro
という単語が含まれて,
Code language: SQL (Structured Query Language) (sql)
このチュートリアルでは、一つ以上のパラメーターを持つストアドプロシージャを作成して実行する方法を学びました。 また、省略可能なパラメーターを作成し、パラメーターの既定値としてNULLを使用する方法も学習しました。