SQL Server 7.0 入門 (8)
ストアド プロシージャで結果を返す
ストアド プロシージャから結果を返す方法は 3 つあります:
1. 結果セットを返す
これは、クライアント アプリケーションが結果を返す最も一般的な方法です。結果セットは、SELECT ステートメントを使用してデータを選択することによって生成されます。結果セットは、永続テーブル、一時テーブル、またはローカル変数から生成できます。結果を別のストアド プロシージャに返すのは効率的なアプローチではありません。ストアド プロシージャは、別のストアド プロシージャによって作成された結果セットにアクセスできません。
たとえば、永続テーブルから結果セットを返します:
USE pubs
GO
CREATE PROCEDURE ap_CreateResultFromPermtable
AS
SELECT au_iname FROM authors
GO
たとえば、ローカル変数から結果セットを作成します:
USE pubs
GO
CREATE PROCEDURE ap_CreateResultFrom Variable
AS
DECLARE @au_iname char(20)
SELECT @au_iname = au_iname FROM authors
WHERE au_id = '172-32-1176'
SELECT @au_id
GO
2 OUTPUTパラメータの値を設定します
2.パラメーターは、ストアド プロシージャからデータを抽出して結果を取得するためによく使用されます。パラメーターがストアド プロシージャに転送されるときに OUTPUT として定義されている場合、パラメーターへの変更はストレージを終了した後も有効になります。
例:
USE pubs
GO
CREATE PROCEDURE ap_SetOutputVar @count integer OUTPUT
AS
SELECT @count = count(*) FROM authors
GO
出力パラメータから値を取得します:
USE pubs
GO
CREATE PROCEDURE ap_GetOutputVar
AS
DECLARE @num integer
EXECUTE ap_SetOutputVar @num OUTPUT
PRINT “カウントは”+convert(char,@num)
GO
· カーソルを OUTPUT パラメータとして使用します。カーソルは OUTPUT (出力) パラメーターを使用できますが、入力パラメーターとして使用することはできません。つまり、結果としてカーソルを返すことはできますが、プロシージャに転送することはできません。カーソルをパラメータとして使用する場合は、OUTPUT および VARYING として修飾する必要があります。 VARYING キーワードは、結果セットが出力パラメータをサポートするために使用されることを示します。これにより、呼び出し元のプロシージャに結果セットを返す機能が提供されます。
例:
pubs
GO
CREATE PROCEDURE GetTitleCount @count_cursor CURSOR VARYING OUTPUT
AS
SET @count_cursor = CURSOR
FOR
SELECT au_id,count(*)
FROM titleauthors
GROUP BY au_id
_OPENまたは
GO
3 , RETURNパラメータでステータスを返します
ストアドプロシージャからエラーコードを返す方法です。ストアド プロシージャは常にステータス値を返します。ユーザーは RETURN ステートメントを使用して独自のステータスを返すこともできます。
例:
USE pubs
GO
CREATE PROCEDURE ap_SetReturnStatus
AS
DECLARE @count integer
SELECT @count = count(*) FROM authors
IF @count = 0
RETURN(1)
ELSE
RETURN (0)
GO
たとえば、返されたステータスを取得します:
USE pubs
GO
CREATE PROCEDURE ap_GetReturnStatus
AS
DECLARE @status integer
EXECUTE @status = ap_SetReturnStatus
IF @status = 1
PRINT “No rows found”
ELSE
PRINT “ suc "cessful"
GO
ストアド プロシージャでのエラー処理
他のプログラムと同様、ストアド プロシージャでのエラー処理は非常に重要です。システムの変更 @@error は、各 Transact SQL ステートメントの実行後に値を取得します。実行が成功した場合、@@error の値は 0 です。エラーが発生した場合、@@error にはエラー情報が含まれます。 @@error システム変数は、ストアド プロシージャのエラー処理にとって非常に重要です。
注: エラーを防ぐために、@@error で設定できる値は sysmessages テーブルの「error」に反映されます。
ストアド プロシージャには 2 種類のエラーがあります:
1. データベース関連のエラー
これらのエラーは、データベース内の不整合によって発生します。システムは、特定のデータベースの問題を示すために 0 以外の @@error 値を使用します。 Transact SQL の実行後、発生したエラーは @@error を通じて取得できます。 @@error がゼロ以外であることが判明した場合は、必要なアクションを実行する必要があり、ほとんどの場合、ストアはそれ以上の処理を行わずに戻ります。次の例は、データベース エラーが発生する一般的な方法を示しています。このプロシージャは、呼び出し側プログラムからアクセスできるように、エラー コードを出力変数に配置します。
pubs を使用
GO
CREATE PROCEDURE ap_TrapDatabaseError @return_code integer OUTPUT
AS
UPDATE authors SET au_iname = "Jackson"
WHERE au_iname = "Smith"
IF @@error <> SELECT @return_code = @ @エラー
Return
end
else
@Return_Code = 0
Go
2、ビジネス ロジック エラー
これらのエラーはビジネス ルール違反によって発生します。これらのエラーを取得するには、まずビジネス ルールを定義し、そのルールに基づいて必要なエラー検出コードをストアド プロシージャに追加する必要があります。これらのエラーを報告するには、RAISERROR ステートメントがよく使用されます。 RAISERROR は、ユーザー定義のエラーを返し、@@error 変数をユーザー定義のエラー番号に設定する機能を提供します。エラー メッセージは動的に作成することも、エラー番号に基づいて「sysmessages」テーブルから取得することもできます。エラーが発生すると、そのエラーはサーバー エラー メッセージの形式でクライアントに返されます。 RAISERROR コマンドの構文は次のとおりです:
RAISERROR (msg_id | msg_str, severity, state
[, argument ][,...n]])
[WITH options]
Msg_id はユーザー定義メッセージの ID を指定します。 、システム テーブルの「sysmessages」に保存されます。
Msg_str は、メッセージを動的に作成するために使用されるメッセージ文字列です。これは、C 言語の「printf」に非常に似ています。
重大度は、ユーザーによって割り当てられたエラー メッセージの重大度を定義します。
State は 1 ~ 127 の任意の整数値で、誤った通話ステータス情報を表します。負の状態値はデフォルトで 1 になります。
OPTIONS は、間違ったカスタマイズ オプションを示します。 OPTIONS の有効な値は次のとおりです:
1) LOG。
エラーをサーバー エラー ログと NT イベント ログに記録します。このオプションには、重大度 19 ~ 25 のメッセージが必要です。このようなメッセージを発行できるのはシステム管理者だけです。
2) ちょっと待ってください。
クライアントサーバーにメッセージを即座に送信します。
3) 設定。
重大度レベルに関係なく、@@error の値を msg_id または 5000 に設定します。
リモート プロシージャ コール
SQL Server は、異なるサーバー上に存在するストアド プロシージャを呼び出す機能を提供します。このようなストアド プロシージャの呼び出しは、リモート ストアド プロシージャ呼び出しと呼ばれます。ある SQL Server から別の SQL Server に呼び出しを転送するには、2 つのサーバーが相互に有効なリモート サーバーとして定義されている必要があります。
リモート サーバーの構成を設定します。
· 特定のサーバーのグループを展開します。
サーバーを右クリックし、[プロパティ] をクリックします。
· 「他の SQL Server が RPC 経由でこの SQL サーバーにリモート接続することを許可する」オプションを設定します。
[クエリ タイムアウト] オプションの値を設定します。これは、クエリ処理からの戻りを待つ秒数を指定します。デフォルト値は 0 で、無制限の待機時間が許可されることを意味します。
· 構成オプションを設定した後、「OK」をクリックします。
· 変更はサーバーを再起動した後に有効になります。
· 他のリモート サーバーでも同じ手順を繰り返します。
リモート ストアド プロシージャを呼び出すには、サーバーの名前を指定し、その後にデータベースの名前と所有者の名前を指定する必要があります。以下は、別のサーバー (Server2) 上のストアド プロシージャを呼び出す例です。
Exec server2.pubs.dbo.myproc
Doudou のコメント:
これは、SQL Server の一般知識の表面的な紹介にすぎません。また、データベース マネージャーではなく、SQL Server データベースに基づいてアプリケーションを作成するプログラマーを対象としています。しかし、アプリケーション プログラマーにとって、データベース管理を理解することも非常に役立ちます。プログラムの最適化にも非常に役立つデータベース管理については、将来的には自分で学ぶことをお勧めします。
上記は SQL Server 7.0 入門 (8) の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。
——————全文終了————————

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

HQL と SQL は Hibernate フレームワークで比較されます。HQL (1. オブジェクト指向構文、2. データベースに依存しないクエリ、3. タイプ セーフティ)、SQL はデータベースを直接操作します (1. データベースに依存しない標準、2. 複雑な実行可能ファイル)。クエリとデータ操作)。

「OracleSQLでの除算演算の使用方法」 OracleSQLでは、除算演算は一般的な数学演算の1つです。データのクエリと処理中に、除算演算はフィールド間の比率を計算したり、特定の値間の論理関係を導出したりするのに役立ちます。この記事では、OracleSQL での除算演算の使用法を紹介し、具体的なコード例を示します。 1. OracleSQL における除算演算の 2 つの方法 OracleSQL では、除算演算を 2 つの異なる方法で実行できます。

Oracle と DB2 は一般的に使用される 2 つのリレーショナル データベース管理システムであり、それぞれに独自の SQL 構文と特性があります。この記事では、Oracle と DB2 の SQL 構文を比較し、相違点を示し、具体的なコード例を示します。データベース接続 Oracle では、次のステートメントを使用してデータベースに接続します: CONNECTusername/password@database DB2 では、データベースに接続するステートメントは次のとおりです: CONNECTTOdataba

MyBatis 動的 SQL タグの解釈: Set タグの使用法の詳細な説明 MyBatis は、豊富な動的 SQL タグを提供し、データベース操作ステートメントを柔軟に構築できる優れた永続層フレームワークです。このうち、Set タグは、UPDATE ステートメントで SET 句を生成するために使用され、更新操作でよく使用されます。この記事では、MyBatis での Set タグの使用法を詳細に説明し、特定のコード例を通じてその機能を示します。 SetタグとはMyBatiで使用するSetタグです。

SQL における Identity とは何ですか? 具体的なコード例が必要です。SQL では、Identity は自動インクリメント数値の生成に使用される特別なデータ型です。多くの場合、テーブル内のデータの各行を一意に識別するために使用されます。 Identity 列は、各レコードが一意の識別子を持つようにするために、主キー列と組み合わせてよく使用されます。この記事では、Identity の使用方法といくつかの実用的なコード例について詳しく説明します。 Identity の基本的な使用方法は、テーブルを作成するときに Identity を使用することです。

WindowsServerBackup は、WindowsServer オペレーティング システムに付属する機能で、ユーザーが重要なデータとシステム構成を保護し、中小企業、エンタープライズ レベルの企業に完全なバックアップおよび回復ソリューションを提供できるように設計されています。この機能を使用できるのは、Server2022 以降を実行しているユーザーのみです。この記事では、WindowsServerBackup のインストール、アンインストール、またはリセットの方法を説明します。 Windows Server バックアップをリセットする方法 サーバー バックアップで問題が発生したり、バックアップに時間がかかりすぎたり、保存されているファイルにアクセスできない場合は、Windows Server バックアップ設定をリセットすることを検討してください。 Windowsをリセットするには

解決策: 1. ログインしているユーザーがデータベースにアクセスまたは操作するための十分な権限を持っているかどうかを確認し、ユーザーが正しい権限を持っているかどうかを確認します; 2. SQL Server サービスのアカウントに指定されたファイルまたはデータベースにアクセスする権限があるかどうかを確認します。 3. 指定されたデータベース ファイルが他のプロセスによって開かれているかロックされているかどうかを確認し、ファイルを閉じるか解放して、クエリを再実行します。管理者として試してください。Management Studio をなどとして実行します。

Springboot+Mybatis-plus が SQL ステートメントを使用して複数テーブルの追加操作を実行しない場合、私が遭遇した問題は、テスト環境で思考をシミュレートすることによって分解されます: パラメーターを含む BrandDTO オブジェクトを作成し、パラメーターをバックグラウンドに渡すことをシミュレートします。 Mybatis-plus で複数テーブルの操作を実行するのは非常に難しいことを理解してください。Mybatis-plus-join などのツールを使用しない場合は、対応する Mapper.xml ファイルを設定し、臭くて長い ResultMap を設定するだけです。対応する SQL ステートメントを記述します。この方法は面倒に見えますが、柔軟性が高く、次のことが可能です。
