And now, for something a little technically lighter... I've taken to using a convention when writing statements that involve XML/XQuery and SQL together. I put the XML input or XQuery program on separate lines than the SQL part of the statement, this seems to make both query languages and also inline XML data easier to read when they're in the same statement. Like this:
-- SQL partSELECT invoice.query('{-- XQuery part, smiley face comments still unsupported --}declare namespace inv = "urn:www-develop-com:invoices";for $i in /inv:Invoicereturn <foo></foo>{-- more SQL follows --}')FROM invoices
I don't necessarily use the XQuery comments at the end (or at the beginning either), but you get the gist. If you adapt this convention, don't EVER try this:
INSERT INTO xmltable VALUES('<?xml version="1.0" encoding="UTF-8"?><doc></doc>')
Looks like a variation of the first example, but it won't work. The ?xml declaration (it's not a processing instruction) must be *exactly* the first characters in an XML document if used (its optional). The parser uses the first few characters in the declaration, if you use it, to identify the XML document, realizing that the declaration also specifies the document encoding. "Pretty formatting" XML in the example above produces a carriage return-line feed followed by XML declaration, which is forbidden. Error is:
Msg 9438, Level 16, State 1, Line 1XML parsing: line 2, character 6, text/xmldecl not at the beginning of input
Either this:
or leaving the declaration out if possible:
INSERT INTO xmltable VALUES('<doc></doc>')
will work fine.
Theme design by Jelle Druyts
Pick a theme: BlogXP sqlx BlogXP sqlx
Powered by: newtelligence dasBlog 2.0.7226.0
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2008, Bob Beauchemin
E-mail