{"id":1005,"date":"2004-11-04T07:36:00","date_gmt":"2004-11-04T07:36:00","guid":{"rendered":"\/blogs\/bobb\/post\/Formatting-XMLXQuery-in-SQL-and-caveats.aspx"},"modified":"2004-11-04T07:36:00","modified_gmt":"2004-11-04T07:36:00","slug":"formatting-xmlxquery-in-sql-and-caveats","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/","title":{"rendered":"Formatting XML\/XQuery in SQL, and caveats"},"content":{"rendered":"<p>\nAnd now, for something a little technically lighter&#8230; I&#39;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&nbsp;query languages and also&nbsp;inline XML data&nbsp;easier to read when they&#39;re in the same statement. Like this:\n<\/p>\n<p>\n&#8212; SQL part<br \/>\nSELECT invoice.query(&#39;<br \/>\n{&#8211; XQuery part, smiley face comments still unsupported &#8211;}<br \/>\ndeclare namespace inv = &quot;urn:www-develop-com:invoices&quot;;<br \/>\nfor $i in \/inv:Invoice<br \/>\nreturn &lt;foo&gt;&lt;\/foo&gt;<br \/>\n{&#8211; more SQL follows &#8211;}<br \/>\n&#39;)<br \/>\nFROM invoices\n<\/p>\n<p>\nI don&#39;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&#39;t&nbsp;EVER&nbsp;try this:\n<\/p>\n<p>\nINSERT INTO xmltable VALUES(&#39;<br \/>\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br \/>\n&lt;doc&gt;&lt;\/doc&gt;<br \/>\n&#39;)\n<\/p>\n<p>\nLooks like a variation of the first example, but it won&#39;t work. The ?xml declaration (it&#39;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. &quot;Pretty formatting&quot; XML in the example above produces a carriage return-line feed followed by XML declaration, which is forbidden. Error is:\n<\/p>\n<p>\nMsg 9438, Level 16, State 1, Line 1<br \/>\nXML parsing: line 2, character 6, text\/xmldecl not at the beginning of input\n<\/p>\n<p>\nEither this:\n<\/p>\n<p>\nINSERT INTO xmltable VALUES(&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br \/>\n&lt;doc&gt;&lt;\/doc&gt;<br \/>\n&#39;)\n<\/p>\n<p>\nor leaving the declaration out if possible:\n<\/p>\n<p>\nINSERT INTO xmltable VALUES(&#39;<br \/>\n&lt;doc&gt;&lt;\/doc&gt;<br \/>\n&#39;)\n<\/p>\n<p>\nwill work fine.\n<\/p>\n<p>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>And now, for something a little technically lighter&#8230; I&#39;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&nbsp;query languages and also&nbsp;inline XML data&nbsp;easier to read when they&#39;re [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,37],"tags":[],"class_list":["post-1005","post","type-post","status-publish","format-standard","hentry","category-sql-server-2005","category-sql-server-xml"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Formatting XML\/XQuery in SQL, and caveats - Bob Beauchemin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Formatting XML\/XQuery in SQL, and caveats - Bob Beauchemin\" \/>\n<meta property=\"og:description\" content=\"And now, for something a little technically lighter&#8230; I&#039;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&nbsp;query languages and also&nbsp;inline XML data&nbsp;easier to read when they&#039;re [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/\" \/>\n<meta property=\"og:site_name\" content=\"Bob Beauchemin\" \/>\n<meta property=\"article:published_time\" content=\"2004-11-04T07:36:00+00:00\" \/>\n<meta name=\"author\" content=\"Bob Beauchemin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bob Beauchemin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/\",\"name\":\"Formatting XML\/XQuery in SQL, and caveats - Bob Beauchemin\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/#website\"},\"datePublished\":\"2004-11-04T07:36:00+00:00\",\"dateModified\":\"2004-11-04T07:36:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/62bfa986c5b5d28fcffd8b4fc409c73e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server 2005\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/category\/sql-server-2005\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Formatting XML\/XQuery in SQL, and caveats\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/\",\"name\":\"Bob Beauchemin\",\"description\":\"SQL Server Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/62bfa986c5b5d28fcffd8b4fc409c73e\",\"name\":\"Bob Beauchemin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6f80e6cc667410857fa6a21931dc528b8092f4d112bf7a8ff7c267674d44ee37?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6f80e6cc667410857fa6a21931dc528b8092f4d112bf7a8ff7c267674d44ee37?s=96&d=mm&r=g\",\"caption\":\"Bob Beauchemin\"},\"sameAs\":[\"http:\/www.sqlskills.com\/blogs\/bobb\/\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/bobb\/author\/bobb\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Formatting XML\/XQuery in SQL, and caveats - Bob Beauchemin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/","og_locale":"en_US","og_type":"article","og_title":"Formatting XML\/XQuery in SQL, and caveats - Bob Beauchemin","og_description":"And now, for something a little technically lighter&#8230; I&#39;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&nbsp;query languages and also&nbsp;inline XML data&nbsp;easier to read when they&#39;re [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/","og_site_name":"Bob Beauchemin","article_published_time":"2004-11-04T07:36:00+00:00","author":"Bob Beauchemin","twitter_misc":{"Written by":"Bob Beauchemin","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/","url":"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/","name":"Formatting XML\/XQuery in SQL, and caveats - Bob Beauchemin","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/#website"},"datePublished":"2004-11-04T07:36:00+00:00","dateModified":"2004-11-04T07:36:00+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/62bfa986c5b5d28fcffd8b4fc409c73e"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/formatting-xmlxquery-in-sql-and-caveats\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/bobb\/"},{"@type":"ListItem","position":2,"name":"SQL Server 2005","item":"https:\/\/www.sqlskills.com\/blogs\/bobb\/category\/sql-server-2005\/"},{"@type":"ListItem","position":3,"name":"Formatting XML\/XQuery in SQL, and caveats"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/bobb\/","name":"Bob Beauchemin","description":"SQL Server Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/bobb\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/62bfa986c5b5d28fcffd8b4fc409c73e","name":"Bob Beauchemin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/bobb\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6f80e6cc667410857fa6a21931dc528b8092f4d112bf7a8ff7c267674d44ee37?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6f80e6cc667410857fa6a21931dc528b8092f4d112bf7a8ff7c267674d44ee37?s=96&d=mm&r=g","caption":"Bob Beauchemin"},"sameAs":["http:\/www.sqlskills.com\/blogs\/bobb\/"],"url":"https:\/\/www.sqlskills.com\/blogs\/bobb\/author\/bobb\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/posts\/1005","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/comments?post=1005"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/posts\/1005\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/media?parent=1005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/categories?post=1005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/bobb\/wp-json\/wp\/v2\/tags?post=1005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}