ホームページ > バックエンド開発 > XML/RSS チュートリアル > XML と SQL 2000 を使用してストアド プロシージャ呼び出しを管理する

XML と SQL 2000 を使用してストアド プロシージャ呼び出しを管理する

黄舟
リリース: 2017-03-04 17:18:54
オリジナル
1928 人が閲覧しました

同じタスクを完了するために、異なるパラメータを持つ複数のストアド プロシージャ (ストアド プロシージャ) を作成するのは、常に大きな負担です。 XML 文字列を使用してパラメーターをストアド プロシージャに送信すると、このタスクが簡素化され、COM コンポーネントの設計も容易になります。

これを実現する方法は、パラメーターを XML 文字列として渡し、XML を解析して必要なデータを取得し、統合する必要がある機能の実装に進むことです。 XML を通じて一部のパラメーターを取得できるだけでなく、XML によって作成された DOM ドキュメントに対してクエリを実行して、複数のストアド プロシージャをカプセル化することもできます。これを実現する方法の例をいくつか示し、それぞれの例について簡単に説明します。

この例では、Customer テーブルの名前フィールドを更新するために、いくつかのパラメーターを渡します。 XML は、customerid (ID 列) と新しい名前フィールドを取得するために解析されます。プロシージャに渡す XML 文字列は次のようになります:

<root><Customer><customerid>3</customerid><name>Acme
 Inc.</name></Customer></root>
ログイン後にコピー

作成されるストレージ フィールドは次のようになります:

CREATE PROCEDURE update_Customer (@xmldatavarchar(8000)) ASDECLARE @customeridintDECLARE @customernamevarchar(50)DECLARE @xmldata_idint
EXEC sp_xml_preparedocument @xmldata_id OUTPUT, @xmldata, &#39;&#39;
SELECT @customerid = customerid, @customername = [name] FROM OPENXML(@xmldata_id, &#39;//Customer&#39;, 2) WITH (customeridint, [name] varchar(50))
EXEC sp_xml_removedocument @xmldata_id
UPDATE Customer SET Customer.[name] = ISNULL(@customername, Customer.[name])WHERE Customer.tblID = @customerid
ログイン後にコピー

プロシージャは、まず、使用する変数が関連情報を保持することを宣言します。この後、DOM ドキュメントが開かれ、sp_xml_preparedocument 呼び出しの最初のパラメーターとして「ハンドル」が返されます。

この呼び出しの 2 番目のパラメーターは、新しい DOM ドキュメントの XML ソース ファイルです。この「ハンドル」は、OPENXML 呼び出しを行うときに DOM から情報をクエリするために使用されます。 OPENXML 呼び出しの 2 番目のパラメーターは、実行されるデータを含む親ノードの Xpath マップです。


3 番目のパラメーター (2) は、要素中心のマッピングが使用されることを指定します。 WITH 句は解析されたデータの行セット形式を提供し、sp_xml_removedocument 呼び出しは DOM ドキュメントのソース ファイルを削除します。

次の例では、複数のデータ列を削除するために一連のユーザー ID を渡します。 XML 文字列の内容は次のとおりです:

<root><Customer><customerid>1</customerid></Customer><Customer><customerid>
2</customerid></Customer><Customer><customerid>3</customerid></Customer>
</root>
ログイン後にコピー

対応するストアド プロシージャは次のようになります:

. . .
EXEC sp_xml_preparedocument @xml_id OUTPUT, @xmldata, &#39;&#39;
DELETE FROM Customer WHERE Customer.tblID IN (SELECT customerid FROM OPENXML(@xmldata_id, &#39;//Customer&#39;, 2) WITH (customeridint))
. . .
ログイン後にコピー


このストアド プロシージャを使用すると、ストアド プロシージャで使用する長い SQL クエリ文字列を作成する必要はありません。 ADO で複数回渡されるか呼び出される。これにより、ネットワーク トラフィックに対する複数の呼び出しの影響も排除されます。

ご覧のとおり、Microsoft の SQL 2000 を使用すると、プロセス全体が少し簡単になります。このアプローチの欠点は、SQL 2000 が XML タスクを実行する場合、パラメータとしての XML の送信が 8,000 文字に制限されることであることに注意してください。いつものように、慎重に計画を立てることの利点を見逃さないでください。

OPENXML、sp_xml_preparedocument、および sp_xml_removedocument の詳細については、MSDN ライブラリにアクセスしてください。

上記は、XML と SQL 2000 を使用してストアド プロシージャ呼び出しを管理する内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート