• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 473
  • Last Modified:

SQL Server Valid XML

My following schema works and throws an error if an invalid schema is passed in

So if I use this
<root0MwljpDk4TE</root>

Open in new window


This error is thrown
Msg 6909, Level 16, State 1, Line 2
XML Validation: Text node is not allowed at this location, the type was defined with element only content or with simple content. Location: /*:root[1]

But I can't seem to get error handling to work.
If I use womething like this I don;t get the @@Error part returned. Just the initial XML Validation error
DECLARE @x XML(videoSchema)
        
SELECT  @x = '<root>0MwljpDk4TE=</root>'

IF @@error <> 0
   PRINT '@err is ' + ltrim(str(@@error)) + '.'

Open in new window



Heres my schema

CREATE XML SCHEMA COLLECTION videoSchema
    AS'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="root" >
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="encString" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>'

DECLARE @x XML(videoSchema)
SELECT @x = '<root><encString>0MwljpDk4TE=</encString></root>'

SELECT @x

Open in new window

0
lrbrister
Asked:
lrbrister
1 Solution
 
Brendt HessSenior DBACommented:
I believe you need to move to the TRY... CATCH error handling for XML syntax errors.  These errors come from the XML engine, which is not perfectly integrated in SQL 2005.

Since all of your code should be in the TRY block, and all error handling in the CATCH block - and the @@error is not always correctly set in XML errors (as you discovered), I tend to work like this with XML coding in 2005

DECLARE @x XML(videoSchema)
DECLARE @stepFlag int

BEGIN TRY
    SET @stepFlag=1
    SELECT  @x = '<root0MwljpDk4TE=</root>'

    SET @stepFlag = 2
....

END TRY

BEGIN CATCH
    IF @stepFlag=1
    BEGIN
        PRINT 'XML Error at Step 1 - ' + @x
        PRINT '@errorvalue: ' + ltrim(str(@@error)) + '.'
    END

    IF @stepFlag=2
    BEGIN
         .....

Open in new window

0
 
lrbristerAuthor Commented:
Got me started.

Thanks
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now