Home Forums Programming XML Slow performance in converting from XML RE: Slow performance in converting from XML

  • OK - Answer.

    Create an XML Schema Collection using:

    CREATE XML SCHEMA COLLECTION dbo.MyXMLSchema

    AS

    N'<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="rows">

    <xs:complexType>

    <xs:sequence>

    <xs:element name="row" maxOccurs="unbounded" minOccurs="0">

    <xs:complexType>

    <xs:sequence>

    <xs:element type="xs:string" name="col" maxOccurs="unbounded" minOccurs="0"/>

    </xs:sequence>

    </xs:complexType>

    </xs:element>

    </xs:sequence>

    </xs:complexType>

    </xs:element>

    </xs:schema>'

    go

    I created the schema definition by using http://www.freeformatter.com/xsd-generator.html and pasting a sample of the XML I needed a schema for.

    After creating the schema collection, I changed the code as follows:

    DECLARE @string NVARCHAR(MAX)

    SET @string=N'<row><col>text</col><col>text</col><col>text</col><col>text</col><col>text</col></row>'

    --Build STring for XML

    SELECT @string = @string + @string + @string + @string + @string

    SELECT @string = @string + @string + @string + @string + @string

    SELECT @string = @string + @string + @string + @string + @string

    SELECT @string = @string + @string + @string + @string + @string

    SELECT @string = @string + @string + @string + @string + @string

    SELECT @string = N'<rows>' + @string + N'</rows>'

    DECLARE @xmlstring XML (dbo.MyXMLSchema)

    SET @xmlstring = CONVERT(XML, @string)

    DECLARE @table TABLE

    (

    c1 NVARCHAR(10),

    c2 NVARCHAR(10),

    c3 NVARCHAR(10),

    c4 NVARCHAR(10),

    c5 NVARCHAR(10)

    )

    INSERT INTO @table

    SELECT xmls.rndx.value('col[1]', 'nvarchar(10)') AS c1,

    xmls.rndx.value('col[2]', 'nvarchar(10)') AS c2,

    xmls.rndx.value('col[3]', 'nvarchar(10)') AS c3,

    xmls.rndx.value('col[4]', 'nvarchar(10)') AS c4,

    xmls.rndx.value('col[5]', 'nvarchar(10)') AS c5

    FROM @xmlstring.nodes('rows/row') AS xmls(rndx);

    SELECT *

    FROM @table

    Before Creating XML Schema Collection: 164756 ms

    After Creating XML Schema Collection: 360 ms 🙂