同じタスクを完了するために、異なるパラメータを持つ複数のストアド プロシージャ (ストアド プロシージャ) を作成するのは、常に大きな負担です。 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, '' SELECT @customerid = customerid, @customername = [name] FROM OPENXML(@xmldata_id, '//Customer', 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, '' DELETE FROM Customer WHERE Customer.tblID IN (SELECT customerid FROM OPENXML(@xmldata_id, '//Customer', 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) に注目してください。