Retrieving Data as XML from SQL Server Article

Share this article

All the hype that once surrounded XML is finally starting to die down, and developers are really beginning to harness the power and flexibility of the language. XML is a data descriptive language that uses a set of user-defined tags to describe data in a hierarchically-structured format.

The release of Microsoft SQL Server 2000 a couple of months ago saw Microsoft jump on the XML band-wagon too – they’ve included a number of different ways to manipulate data as well-formed XML. Firstly, there’s the SQL XML support. Microsoft’s implementation of SQL XML provides a simple configuration tools that allows developers to gain remote access to databases using URL based queries over HTTP. For example, we can setup an SQL XML virtual directory on our Web server named “myVirtual”. Then, assuming we have the appropriate security permissions, we can use any browser to query our database using a simple URL based query (such as: http://www.myserver.com/myVirtual?SQL=select+*+from+products+for+xml+auto). This then returns our results as an XML based recordset.

Notice the “for xml auto” part of our query above? This determines the way in which SQL Server 2000 shapes our data. There are three shaping methods:

  1. “for xml auto”: Returns XML elements that are nested, based on which tables are listed in the “from” part of the query, and which fields are listed in the “select” part.

  • “for xml raw”: Returns XML elements with the “row” prefix (ex: “<row tProduct ...>“). Each column in a table is represented as an attribute and null column values aren’t included.
  • “for xml explicit”: Explicit mode is the most complex shaping method used in SQL Server 2000. It allows users to query a data source in such a way that the names and values of the returned XML are specified before the query batch is executed.
  • It’s this third method, “for xml explicit”, that I will discuss today. The explicit method, in my opinion, is the most powerful feature of SQL Server 2000. Not only can we specify how our XML data is returned to us, but we can also use record filters and sorting patterns as well, because, as we all know, sorting an XML document any other way is almost impossible.

    Now, let’s get into it. This article is aimed at the intermediate to advanced developer who’s looking to use XML in the BLL (business logic layer) of an n-Tier based application where speed is a critical issue. To benefit from this article, you’ll need to equip yourself with the following:

    • A Win2k box running IIS and SQL Server 2000 with XML support
    • Basic ASP, SQL, XML and XSL knowledge

    Step 1: Creating our sample database

    On your SQL Server 2000 server, open Enterprise Manager and create a new database named "myProducts". Then, using either Enterprise Manager, or Query Analyser, create the tables shown below:

    515hierarchy

    (Note: catId, productId and descId are all auto-incrementing identity fields)

    As you’ve probably guessed, we’re using three tables to simulate a very simple product description database (let’s assume we sell books). The diagram above shows the hierarchy of our data: categories listing products, listing their descriptions. Before we progress to the next step, we’ll need to create some dummy data in our tables. To maximise productivity and minimise the length of this article, I’ve created a simple T-SQL script, that will populate our tables as needed, you can download it here. The script will create 3 categories, 7 products and 7 descriptions.

    Go to page: 1 | 2 | 3

    Frequently Asked Questions (FAQs) about Data as XML in SQL Server

    How can I convert XML data to a recordset in SQL Server?

    Converting XML data to a recordset in SQL Server involves using the OPENXML function. This function provides a rowset view over an XML document. You can use this function to query XML data, and it allows you to convert XML data into a relational format. Here is a simple example of how you can use the OPENXML function:

    DECLARE @idoc int, @doc varchar(1000);
    SET @doc ='
    <ROOT>
    <Customer CustomerID="VINET" ContactName="Paul Henriot">
    <Order OrderID="10248" CustomerID="VINET" EmployeeID="5" />
    </Customer>
    </ROOT>';
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;
    SELECT *
    FROM OPENXML (@idoc, '/ROOT/Customer/Order',2)
    WITH (OrderID int 'OrderID',
    CustomerID varchar(10) 'CustomerID',
    EmployeeID int 'EmployeeID');
    EXEC sp_xml_removedocument @idoc;

    How can I convert a recordset to XML in SQL Server?

    SQL Server provides the FOR XML clause that you can use to format query results as XML. This clause returns a single XML string that represents the combined XML fragments. Here is a simple example:

    SELECT CustomerID, ContactName
    FROM Customers
    FOR XML RAW, ELEMENTS;

    What are the benefits of using XML data in SQL Server?

    XML data in SQL Server provides several benefits. It allows you to store structured data in a format that can be easily shared across different systems. XML data is also self-describing, which means it carries both data and the data structure. This makes it easier to understand and use, especially when dealing with complex data structures.

    Can I use XML data in SQL Server to communicate with web services?

    Yes, you can use XML data in SQL Server to communicate with web services. XML is a standard format for exchanging data over the internet. You can use SQL Server’s XML capabilities to generate XML data that can be sent to a web service, or to parse XML data received from a web service.

    How can I query XML data in SQL Server?

    SQL Server provides the XQuery language for querying XML data. XQuery is a powerful and flexible language that allows you to query complex XML data structures. You can use XQuery in SQL Server to extract data from XML columns, variables, and parameters.

    Can I index XML data in SQL Server?

    Yes, you can index XML data in SQL Server. SQL Server provides XML indexes that you can use to improve the performance of queries against XML data. There are two types of XML indexes: primary and secondary. A primary XML index allows you to efficiently query the values and paths of XML data. Secondary XML indexes provide additional ways to query XML data based on values or paths.

    How can I validate XML data in SQL Server?

    SQL Server allows you to validate XML data against an XML schema. You can associate an XML schema collection with an XML column or variable, and SQL Server will ensure that any XML data stored in that column or variable complies with the schema.

    Can I modify XML data in SQL Server?

    Yes, you can modify XML data in SQL Server. SQL Server provides the modify() method of the XML data type that you can use to insert, update, or delete parts of an XML document.

    How can I store XML data in SQL Server?

    SQL Server provides the XML data type that you can use to store XML data. You can use the XML data type to define columns, variables, and parameters for storing XML data.

    Can I use XML data in SQL Server to integrate with other systems?

    Yes, you can use XML data in SQL Server to integrate with other systems. XML is a standard format for data exchange, and many systems support XML as a way to import or export data. You can use SQL Server’s XML capabilities to generate XML data that can be imported into another system, or to parse XML data exported from another system.

    Mitchell HarperMitchell Harper
    View Author

    Mitchell is the co-founder and product manager at BigCommerce—SaaS ecommerce software which is used by thousands of businesses to sell online. He can be reached via email at mitch@bigcommerce.com

    Share this article
    Read Next
    Get the freshest news and resources for developers, designers and digital creators in your inbox each week