ストアド プロシージャとは何ですか?
意味:
よく使用するタスクや非常に複雑なタスクを事前に SQL ステートメントで記述しておき、指定した名前で保存しておけば、将来、定義されたストアド プロシージャと同じ機能を持つサービスをデータベースに提供するように要求する場合は、execute を呼び出すだけで済みます。 . オートコンプリートコマンド。
この時点で、ストアド プロシージャは単なる SQL ステートメントの集合なのか、と疑問に思う人もいるかもしれません。
なぜマイクロソフトはこのテクノロジーを追加したいのでしょうか?
では、ストアド プロシージャと通常の SQL ステートメントの違いは何でしょうか?
ストアド プロシージャの利点:
1. ストアド プロシージャは作成時にのみコンパイルされます。その後、ストアド プロシージャを実行するたびに再コンパイルする必要はありません。そのため、ストアド プロシージャを使用すると実行が向上します。データベースの速度。
2. データベース上で複雑な操作 (複数のテーブルに対する更新、挿入、クエリ、削除など) を実行する場合、この複雑な操作をストアド プロシージャにカプセル化し、データベースが提供するトランザクション処理と組み合わせて使用できます。
3. ストアドプロシージャを再利用できるため、データベース開発者の負担を軽減できます。
4. セキュリティが高く、特定のストアドプロセスを特定のユーザーのみが使用できるように設定可能
ストアド プロシージャの種類:
1. システム ストアド プロシージャ: sp_ で始まり、システムのセットアップ、情報の取得、および指定されたオブジェクトに関する関連情報の取得に使用される sp_help などの関連管理作業に使用されます。
2. 拡張ストアド プロシージャは XP_ で始まり、オペレーティング システムが提供する関数を呼び出すために使用されます。
exec master..xp_cmdshell 'ping 10.8.16.1'
3. ユーザー定義ストアド プロシージャ。これをストアド プロシージャと呼びます。
一般的なフォーマット
プロシージャ プロシージャ名を作成します
[@parameter data_type][出力]
[with]{再コンパイル|暗号化}
として
ql_statement
説明する:
出力: このパラメータを返すことができることを示します
{再コンパイル|暗号化}を使用
recompile: このストアド プロシージャが実行されるたびに再コンパイルされることを意味します。
暗号化: 作成されたストアド プロシージャの内容は暗号化されます。
のように:
テーブルブックの内容は以下の通りです
番号付き書籍タイトルの価格
001 C言語入門$30
002 PowerBuilder レポート開発$52
例 1: テーブル Book の内容をクエリするストアド プロシージャ
プロシージャクエリブックを作成する
として
本から * を選択してください
行く
クエリブックの実行
例 2: テーブル book にレコードを追加し、このテーブル内のすべての書籍の合計金額をクエリします。
プロシージャの作成 insert_book
@param1 char(10)、@param2 varchar(20)、@param3 マネー、@param4 マネー出力
暗号化あり ----------暗号化
として
本を挿入(番号、本のタイトル、価格) 値(@param1、@param2、@param3)
本から @param4=sum(価格) を選択してください
行く
実行例:
@total_price のお金を宣言します
exec insert_book '003','Delphi コントロール開発ガイド',$100,@total_price
print '合計金額は'+convert(varchar,@total_price)
行く
ストアド プロシージャからの戻り値は次の 3 種類です。
1. Return で整数を返します
2. パラメータを出力形式で返します
3.レコードセット
戻り値の違いは次のとおりです。
出力と戻り値の両方をバッチ プログラム内の変数として受け取ることができ、レコードセットはバッチを実行するクライアントに返されます。
例 3: Product と Order という 2 つのテーブルがあり、次のテーブルの内容が含まれます。
製品
製品番号 製品名 お客様のご注文数量
001 ペン 30
002 ブラシ 50
003 ペンシル100
注文
製品番号 お客様名 お客様保証金
001 南山区$30
002 羅湖区$50
003 宝安区$4
2 つのテーブルを接続するための接続条件として、数値を使用してください。このテーブルには、顧客名のみが含まれます。
合計金額 = デポジット * 注文数量、一時テーブルは保管プロセスに配置されます
コードは次のとおりです。
プロシージャ temp_sale を作成する
として
a.製品番号、a.製品名、b.顧客名、b.顧客保証金、a.顧客注文数量* b.顧客保証金を合計金額として選択します
製品 a の内部結合から #temptable に a.製品番号=b.製品番号の注文 b に
@@エラー=0の場合
「良い」と印刷する
それ以外
「失敗」を印刷