|
|
|
SSC-Addicted
      
Group: General Forum Members
Last Login: Saturday, May 11, 2013 8:17 AM
Points: 460,
Visits: 2,521
|
|
|
|
|
|
SSC Eights!
      
Group: General Forum Members
Last Login: Tuesday, January 15, 2013 10:46 AM
Points: 911,
Visits: 831
|
|
| Very informative. Keep on going!
|
|
|
|
|
SSC-Enthusiastic
      
Group: General Forum Members
Last Login: Wednesday, February 13, 2013 9:15 PM
Points: 112,
Visits: 319
|
|
Hi Jacob,
Wondering if could give some feedback to my issue here.
With SQL Server 2008...
I have an XML document and created it's XSD schema using VSTF (Visual Studio) create schema tool. I am attaching the XML document and it's XSD schema created by VSTF here.
I am trying to shred the values from the XML document into my table. If I do select by binding the XML doc to its schema I get the following error. However, I am able to run my select successfully if I don't bound the XML doc with its XSD schema. So I know that my Select statement using value() and nodes() method is correct.
Msg 2389, Level 16, State 1, Line 23 XQuery [value()]: 'value()' requires a singleton (or empty sequence), found operand of type 'xdt:anyAtomicType *'
Below is my Select query using nodes() and value() method.
SELECT S.Node.value('(../@Name)[1]', 'varchar(200)') AS ProductName, S.Node.value('(../@ID)[1]', 'int') AS ProductID, S.Node.value('@Keyname', 'varchar(200)') AS ItemName, S.Node.value('@Keyvalue', 'varchar(max)') AS ItemValue FROM @MyXML.nodes('//MyXML/Product/Item') S(Node);
If I declare the XML doc by associating it to the XSD schema like you have done in this article, I get the above error, however, without association, it's succcessfully shreds my data.
You can simply copy the content of the attachment to you SQL Management Query window and run it to see the error. If you run without bounding it to the schema, it will run fine.
|
|
|
|
|
SSC-Addicted
      
Group: General Forum Members
Last Login: Saturday, May 11, 2013 8:17 AM
Points: 460,
Visits: 2,521
|
|
bdba, I altered the query a bit. Here is the new version
SELECT p.value('@Name', 'varchar(15)') AS ProductName, p.value('@ID', 'int') AS ProductID, i.value('@Keyname', 'varchar(15)') AS ItemName, i.value('@Keyvalue', 'varchar(15)') AS ItemValue FROM @MyXML.nodes('/MyXML/Product') x(p) CROSS APPLY p.nodes('Item') y(i)
/* ProductName ProductID ItemName ItemValue --------------- ----------- --------------- --------------- MyProduct 12354 MyItem MyItemValue MyProduct 12354 MyPrice MyPriceValue MyProduct1 1235456 MyItem1 MyItemValue1 MyProduct1 1235456 MyPrice1 MyPriceValue1 */
.
|
|
|
|
|
SSC-Enthusiastic
      
Group: General Forum Members
Last Login: Wednesday, February 13, 2013 9:15 PM
Points: 112,
Visits: 319
|
|
Thanks Jacob,
That works pretty well. Have used Cross Apply with XML and another table but within the same XML. This is pretty useful. Appreciate your feedback on this.
|
|
|
|
|
SSCrazy
      
Group: General Forum Members
Last Login: Thursday, May 30, 2013 1:26 PM
Points: 2,359,
Visits: 3,293
|
|
|
|
|
|
SSC-Enthusiastic
      
Group: General Forum Members
Last Login: Monday, June 10, 2013 3:02 AM
Points: 139,
Visits: 293
|
|
One less to go...very informative as previous ones
But as on previous posts of this XML series, the links to the code are empty
|
|
|
|