4
<?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>

I have xml file as above.

In my SQL Server 2008 database there is table Book__Master In which all the columns are same as elements in above xml file i.e. there are columns like bookid, author, title etc.

Now I want to write a stored procedure which accepts this xml file as input parameter and stores the element's values as it is in their respective columns.

Can anyone help me on this that how I can write this type of stored procedure?

marc_s
9,0626 gold badges46 silver badges52 bronze badges
asked Sep 25, 2013 at 10:28
1
  • This sounds like a homework assignment... Commented Sep 25, 2013 at 11:11

1 Answer 1

7

You can use X-Query for that:

SQL Fiddle

MS SQL Server 2008 Schema Setup:

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;

Query 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;

Results :

| 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日 |

This shows you how to get to the values. From there you can easily insert them into your table.

answered Sep 25, 2013 at 12:34
0

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.