sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-process XML-prestanda:Infoga i kolumner i en tabell

Det första jag skulle försöka är att specificera text() nod när du använder XML-datatypen för att förhindra SQL Server från att göra en djupsökning efter textelement.

INSERT INTO SUPPLIER
   (IDCONO
   ,IDSUNO
   ,IDSUTY)
SELECT
   T.C.value('(IDCONO/text())[1]', 'VARCHAR(50)') as IDCONO,
   T.C.value('(IDSUNO/text())[1]', 'VARCHAR(50)') as IDSUNO,
   T.C.value('(IDSUTY/text())[1]', 'VARCHAR(50)') as IDSUTY
FROM @data.nodes('/Suppliers/Supplier') T(C)

Om det inte är tillräckligt bra skulle jag prova OPENXML istället.

DECLARE @idoc INT
EXEC sp_xml_preparedocument @idoc OUT, @data

INSERT INTO SUPPLIER
   (IDCONO
   ,IDSUNO
   ,IDSUTY)
SELECT IDCONO, IDSUNO, IDSUTY
FROM OPENXML(@idoc, '/Suppliers/Supplier', 2) WITH
        (IDCONO VARCHAR(50),
         IDSUNO VARCHAR(50),
         IDSUTY VARCHAR(50))


EXEC sp_xml_removedocument @idoc



  1. SQL-fråga för att hämta rader där ett värde finns i ett kommaseparerat fält

  2. Installera icu4c version 63 med Homebrew

  3. PHP PDO väljer kolumner med enstaka citattecken i deras namn

  4. SQL 2005 CTE vs TEMP-tabell Prestanda när den används i kopplingar till andra tabeller