• You are not limited to varchar/char datatypes.  This is a limitation of the example because it is using a local variable.  You are permitted to use a text datatype if you wish.  However, you need to be aware that the performance of using OPENXML versus using data from a table can be significantly slower. 

    Have a look at topic "OPENXML" in BOL.  It has further examples which include how to show the data as separate columns.

    One of these examples is :

    declare @idoc int

    declare @doc varchar(1000)

    set @doc ='

    <ROOT>

    <Customer CustomerID="VINET" ContactName="Paul Henriot">

       <Order OrderID="10248" CustomerID="VINET" EmployeeID="5"

               OrderDate="1996-07-04T00:00:00">

          <OrderDetail ProductID="11" Quantity="12"/>

          <OrderDetail ProductID="42" Quantity="10"/>

       </Order>

    </Customer>

    <Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">

       <Order OrderID="10283" CustomerID="LILAS" EmployeeID="3"

               OrderDate="1996-08-16T00:00:00">

          <OrderDetail ProductID="72" Quantity="3"/>

       </Order>

    </Customer>

    </ROOT>'

    --Create an internal representation of the XML document.

    exec sp_xml_preparedocument @idoc OUTPUT, @doc

    -- SELECT stmt using OPENXML rowset provider

    SELECT *

    FROM   OPENXML (@idoc, '/ROOT/Customer/Order/OrderDetail',2)

             WITH (OrderID       int         '../@OrderID',

                   CustomerID  varchar(10) '../@CustomerID',

                   OrderDate   datetime    '../@OrderDate',

                   ProdID      int         '@ProductID',

                   Qty         int         '@Quantity')

     

    This is the result:

    OrderID CustomerID           OrderDate                 ProdID    Qty

    ------------------------------------------------------------------------

    10248      VINET       1996-07-04 00:00:00.000   11      12

    10248      VINET       1996-07-04 00:00:00.000   42      10

    10283      LILAS       1996-08-16 00:00:00.000   72      3