Articles

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パラメータをWHERESELECTステートメントの句で使用し、定価が@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パラメーターを文字列パラメーターとしてストアドプロシージャに追加します。,

    WHERESELECTステートメントの

    句に、次の条件を追加しました。

    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を使用する方法も学習しました。