SQL のストアド プロシージャ | 概要

SQL のストアド プロシージャ | 概要

このブログでは、コード セットを保存し、必要なときにいつでも繰り返し使用できる SQL のストアド プロシージャについて説明します。ストアド プロシージャはビューに似ています。ただし、ストアド プロシージャを使用すると、ビューでは実行できない DROP、TRUNCATE、DELETE などの一般的なテーブル操作を実行できます。

ストアド プロシージャもプリコンパイルされているため、ビューよりも高速に実行されます。また、データベース サーバーに送信されるデータの量も最小限に抑えられます。

目次

SQL のストアド プロシージャの構文: パラメーターなし

パラメーターなしでストアド プロシージャを作成するには、CREATE関数から始める必要があります。次に、PROC関数を追加し、その直後にプロシージャ名を入力し、AS関数を追加します。

SQL のストアド プロシージャ |  概要

でストアド プロシージャを作成することは、テーブルやビューを作成することと似ています。ただし、違いはデータの取得プロセスにあります。

たとえば、ビューからデータを取得する場合は、「SELECT * FROM view_name」を使用します。一方、ストアド プロシージャの場合は、「実行」を意味する EXEC を使用し、その後にストアド プロシージャ名を入力します。

SQL のストアド プロシージャ |  概要

ストアド プロシージャを実行すると、追加した命令やコマンドに基づいた情報も表示されます。

SQL のストアド プロシージャの構文: パラメーターあり

に移りましょう。このプロセスは、前に示した例と似ています。唯一の違いは、 AS関数の前にパラメーターを含める必要があり、直後にデータ型も含める必要があることです。

SQL のストアド プロシージャ |  概要

ストアド プロシージャの作成時に宣言したパラメーターをコマンドで利用することもできます。これは、複数の値を入力する時間を節約するためです。たとえば、customerID1customerID2などを手動で入力する代わりに、 @custidまたはパラメーターを利用して、コードのセットが長くならないようにしました。

SQL のストアド プロシージャ |  概要

パラメーターを使用または含める場合は、@記号を使用することが重要であることに注意してください。パラメーターを 1 つだけではなく、必要な数だけ含めることもできます。これは、パラメーターを使用してストアド プロシージャを実行する方法です。

SQL のストアド プロシージャ |  概要

ご覧のとおり、ストアド プロシージャの実行時に値1のパラメーターも使用しました。これにより、 custid1の情報のみが取得されます。

SSMS のストアド プロシージャのサンプル シナリオ

SQL のストアド プロシージャの例をさらに見てみましょう。最初の例では、以下で強調表示されているコマンドを使用してサンプル ストアド プロシージャを作成します。

SQL のストアド プロシージャ |  概要

ストアド プロシージャを作成する際の命名規則では、通常、これがストアド プロシージャであることを示すために「usp」または「sp」を使用します。「usp」が何を意味するのか疑問に思っている場合は、単にユーザー定義ストアド プロシージャを表します。 

次に、ストアド プロシージャの実行時に処理するクエリを作成します。

SQL のストアド プロシージャ |  概要

前の例のクエリでは、単にdbo.stageOrdersという名前のテーブルが削除されます。次に、 Sales.SalesOrderHeaderテーブルのデータを使用してdbo.stageOrdersを再作成します。 

次のコードを強調表示し、[実行]ボタンをクリックして、このストアド プロシージャを作成しましょう。

SQL のストアド プロシージャ |  概要

その後、このようなメッセージが表示されるはずです。

SQL のストアド プロシージャ |  概要

次に、 EXEC usp_TESTを実行してストアド プロシージャを実行します。

SQL のストアド プロシージャ |  概要

usp_TESTストアド プロシージャを実行すると、dbo.stageOrdersにSales.SalesOrderHeaderからのデータが含まれるようになります。以下のコマンドを実行して、dbo.stageOrdersの内容を確認してみましょう。

SQL のストアド プロシージャ |  概要

その結果、ストアド プロシージャに追加したコマンドに基づいてdbo.stageOrdersに作成したデータがこれらになります。

SQL のストアド プロシージャ |  概要

2 番目のサンプル シナリオ

別の例に移りましょう。今回は、 dbo.stageOrdersテーブルを削除し、 Sales.SalesOrderHeaderテーブルからのデータを使用して同じテーブルを再作成する必要はありません。

代わりに、「 usp_TESTストアド プロシージャを実行するたびに Sales.SalesOrderHeader テーブルのデータが表示されるようにしたいだけです。

これを実行するには、ALTERステートメントを使用して、最近作成したストアド プロシージャに変更を加える必要があります。

SQL のストアド プロシージャ |  概要

この例では、ストアド プロシージャを変更するために使用されるALTERステートメントを利用しました。これをビューやテーブルに適用することもできます。上のスクリーンショットのコードを実行すると、ストアド プロシージャによって処理されるクエリが変更されるはずです。

今回は、以前のようにテーブルを再作成しません。「 usp_TEST 」を実行すると、 Sales.SalesOrderHeaderテーブルからデータが取得されるだけです。

SQL のストアド プロシージャ |  概要

SQL のストアド プロシージャ |  概要

3 番目のサンプル シナリオ

別の例を見てみましょう。今回は、 SSMSでストアド プロシージャを作成する最初の例で使用した dbo.stageOrders テーブルを再利用します。この例では、dbo.stageOrders テーブルを選択することから始めます 。 

SQL のストアド プロシージャ |  概要

dbo.stageOrders からすべてのデータを選択した結果は次のようになります。

SQL のストアド プロシージャ |  概要

次に、 usp_TESTを実行して dbo.stageOrders テーブルを空にしましょう。次のコマンドを追加することでこれを行うことができます。

SQL のストアド プロシージャ |  概要

TRUNCATE TABLEコマンドを追加した後、 usp_TESTを更新する必要があります。

SQL のストアド プロシージャ |  概要

その後、コマンドが正常に完了したことを示すメッセージが表示されます。次に、 usp_TESTを再度実行します。

SQL のストアド プロシージャ |  概要

usp_TESTを実行すると、 Sales.SalesOrderHeaderのすべてのレコードが表示され、 dbo.stageOrdersテーブルも空になります。 

SQL のストアド プロシージャ |  概要

dbo.stageOrders テーブルが空かどうかを確認するには、次のコマンドを使用してテーブルを選択し、実行する必要があります。

SQL のストアド プロシージャ |  概要

上記のコードを実行すると、dbo.stageOrders テーブルが空になっていることがわかります。これは、 usp_TESTの更新に使用したTRUNCATE TABLEコマンドが原因です。

SQL のストアド プロシージャ |  概要

SQL での保存されたストアド プロシージャの場所

SQL のストアド プロシージャが保存されている場所を確認したい場合は、左側の[オブジェクト エクスプローラー]パネルに移動し、作業しているデータベースの前にある[ + ] アイコンをクリックします。

SQL のストアド プロシージャ |  概要

次に、「Programmability」右クリックし「Refresh」を選択します。

SQL のストアド プロシージャ |  概要

SQL のストアド プロシージャ |  概要

「 + 」アイコンをクリックして、 Programmabilityフォルダまたはグループを展開します。次に、同じ手順を実行して「ストアド プロシージャ」グループを展開します。ストアド プロシージャ グループ内にdbo.usp_TESTが表示されるはずです。

SQL のストアド プロシージャ |  概要

SQL のストアド プロシージャ |  概要

SQL の特定のストアド プロシージャが実行しているコマンドやクエリを確認したい場合は、ストアド プロシージャを右クリックし 、以下のスクリーンショットの手順に従ってください。

SQL のストアド プロシージャ |  概要

その後、別のタブでストアド プロシージャが開き、そこに提供されているコマンドが表示されます。dbo.usp_TESTを開くと次のようになります。

SQL のストアド プロシージャ |  概要

ご覧のとおり、CREATEステートメントの前にデフォルトのコマンドがいくつかあります。必要に応じて単に削除することもできます。 

SQL のストアド プロシージャ |  概要

これで、 SQL のストアド プロシージャが実行しているコマンドを確認する方法がわかりました。

パラメータを使用した SQL でのストアド プロシージャの作成

次に、パラメーターを含むストアド プロシージャを作成します。たとえば、次のコードを使用して新しいストアド プロシージャを作成します。

SQL のストアド プロシージャ |  概要

コード例では、usp_GetCustomerという名前のストアド プロシージャを作成する同じプロセスを使用しました。次に、入力タイプがINTの@CustomerIDというパラメーターを追加しました。

ストアド プロシージャの作成時にパラメータを追加した後は、コマンドを実行するときは常にパラメータを指定する必要があることに注意してください。

パラメーターを指定せずにusp_GetCustomerを実行するとどうなるかを見てみましょう。

SQL のストアド プロシージャ |  概要

パラメータを指定せずにusp_GetCustomerを実行すると、エラー メッセージが表示されました。パラメーターを指定してusp_GetCustomerを実行すると、次のようになります。

SQL のストアド プロシージャ |  概要

パラメータを指定すると、ストアド プロシージャの実行で適切な結果を得ることができます。

デフォルト値を使用したスト​​アド プロシージャの作成

パラメーターを使用してストアド プロシージャを実行する際にエラー メッセージが表示されることを回避したい場合は、デフォルト パラメーターとして機能するデフォルト値を設定できます。

たとえば、usp_GetOrdersBy Yearという名前のストアド プロシージャを作成します。

次に、入力タイプが「INT 」、デフォルト値が2011であるパラメーター@Order Yearを追加します。

SQL のストアド プロシージャ |  概要

パラメーターを指定せずにusp_GetOrdersBy Yearを実行すると、 2011 年のレコードが表示されます。

SQL のストアド プロシージャ |  概要

SQL のストアド プロシージャ |  概要

一方、指定されたパラメーターとして2014を指定してusp_GetOrdersBy Yearを実行すると、 2014 年のレコードが表示されるはずです。

SQL のストアド プロシージャ |  概要

SQL のストアド プロシージャ |  概要

これは、日常のデータ管理タスクでストアド プロシージャを利用する方法です。

SQL 集計関数の HAVING 句
ISNULL SQL 関数 In Case ステートメント
OFFSET および FETCH を使用した SQL データ抽出

結論

すべてを考慮すると、SQL のストアド プロシージャとは何か、そしてその目的は理解できました。現在のストアド プロシージャを変更または更新するために使用されるALTERステートメントについても説明しました。

さらに、SQL でストアド プロシージャを作成するさまざまな方法があること、およびデフォルト値を指定することでストアド プロシージャの実行時にエラーが発生しないようにする方法を学びました。

最も重要なことは、長いコード セットを繰り返し実行することを避けるために、ストアド プロシージャを利用してコマンド セットを保存する方法を学習したことです。最後に注意してください。パラメーターを指定するときは、「 @ 」記号を使用することを忘れないでください。

ではごきげんよう、

ハーフィズ


Power Automate の文字列関数: Substring と IndexOf

Power Automate の文字列関数: Substring と IndexOf

Microsoft フローで使用できる 2 つの複雑な Power Automate String 関数、substring 関数とindexOf 関数を簡単に学習します。

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates ツールチップを使用すると、より多くの情報を 1 つのレポート ページに圧縮できます。効果的な視覚化の手法を学ぶことができます。

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を作成し、データを受信する方法を学んでいます。

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で簡単に日付テーブルを作成する方法について学びましょう。データの分析と視覚化のための効果的なツールとして活用できます。

2 つの方法による SharePoint 列の検証

2 つの方法による SharePoint 列の検証

SharePoint 列の検証の数式を使用して、ユーザーからの入力を制限および検証する方法を学びます。

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel ファイルおよび CSV ファイルにエクスポートする方法を学び、さまざまな状況に最適なエクスポート方法を決定できるようにします。

Power Automate のオンプレミス データ ゲートウェイ

Power Automate のオンプレミス データ ゲートウェイ

ユーザーがコンピューターから離れているときに、オンプレミス データ ゲートウェイを使用して Power Automate がデスクトップ アプリケーションにアクセスできるようにする方法を説明します。

DAX 数式での LASTNONBLANK の使用

DAX 数式での LASTNONBLANK の使用

DAX 数式で LASTNONBLANK 関数を使用して、データ分析の深い洞察を得る方法を学びます。

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

LuckyTemplates で予算分析とレポートを実行しながら、CROSSJOIN 関数を使用して 2 つのデータ テーブルをバインドする方法を学びます。

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

このチュートリアルでは、LuckyTemplates TREATAS を使用して数式内に仮想リレーションシップを作成する方法を説明します。