web-dev-qa-db-ja.com

入力としてxmlファイルを受け入れるストアドプロシージャ

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
</catalog>

上記のxmlファイルがあります。

私のSQL Server 2008データベースにはテーブルBook__Masterがあり、すべての列は上記のxmlファイルの要素と同じです。つまり、bookidauthortitleなど.

次に、このxmlファイルを入力パラメーターとして受け入れ、要素の値をそれぞれの列にそのまま格納するストアドプロシージャを記述します。

このタイプのストアドプロシージャをどのように記述できるかについて、誰かが私にこれを手伝ってくれる?

3
nilesh888

そのためにX-Queryを使用できます。

SQLフィドル

MS SQL Server 2008スキーマセットアップ

CREATE PROCEDURE dbo.ParseXML
   @XML XML
AS
BEGIN

  SELECT 
    Book.value('@id','NVARCHAR(100)') AS id,
    Book.value('author[1]','NVARCHAR(100)') AS author,
    Book.value('title[1]','NVARCHAR(100)') AS title,
    Book.value('price[1]','DECIMAL(10,4)') AS price,
    Book.value('publish_date[1]','DATE') AS publish_date

    FROM @XML.nodes('catalog/book')Catalog(Book)

RETURN;
END;

クエリ1

DECLARE @FileXML XML = '<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer''s Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
</catalog>';

EXEC dbo.ParseXML @FileXML;

結果

|    ID |               AUTHOR |                 TITLE | PRICE | PUBLISH_DATE |
|-------|----------------------|-----------------------|-------|--------------|
| bk101 | Gambardella, Matthew | XML Developer's Guide | 44.95 |   2000-10-01 |
| bk102 |           Ralls, Kim |         Midnight Rain |  5.95 |   2000-12-16 |

これは、値に到達する方法を示しています。そこから簡単にテーブルに挿入できます。

6
Sebastian Meine