2012-04-29 15 views
6

Stavo guardando questi esempi su Microsoft.com qui:Bulk Import XML in SQL Server

http://support.microsoft.com/kb/316005

http://msdn.microsoft.com/en-us/library/aa225754%28v=sql.80%29.aspx

Ma che sta dicendo in parte di esso è passaggi che il codice VBScript deve essere eseguita e non ero in grado di trovare dove dovrebbe essere eseguito VBScript. È possibile essere eseguito in SQL Server stesso?

Il codice dal sito sembra qualcosa di simile:

Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkLoad") 
objBL.ConnectionString = "provider=SQLOLEDB.1;data source=MySQLServer; 
          database=MyDatabase;uid=MyAccount;pwd=MyPassword" 
objBL.ErrorLogFile = "c:\error.log" 
objBL.Execute "c:\customermapping.xml", "c:\customers.xml" 
Set objBL = Nothing 

Questo sembra che potrebbe essere eseguito in ASP classico o qualcosa del genere, ma preferisco tenerlo all'interno di SQL Server. Qualcuno sa come eseguire qualcosa di simile a tutto con SQL Server? o qualcuno ha un metodo migliore per l'importazione bulk di XML nel server SQL?

+0

È possibile utilizzare VB6, Visual Basic per applicazioni IDE da Office (Word, Excel, PP, ecc.: Alt + F11> Inserisci> Modulo> 'Sottotest() \ n ... codice sorgente .. \ nEnd Sub ') o VbsEdit. –

+2

VBScript? Perché stai partendo da articoli KB di 7 anni e documentazione di SQL Server 2000? Perché non dovresti iniziare da [questo documento] (http://msdn.microsoft.com/en-us/library/ms191184 (v = sql.100) .aspx), che è molto più recente, orientato alla piattaforma sei effettivamente attivo e hai impiegato circa 20 secondi per individuare l'hit migliore tramite la ricerca di "bulk import XML in SQL Server", l'ultima frase nella tua domanda? –

risposta

11

SQL Server è in grado di leggere XML e inserirlo come necessario. Ecco un esempio di un file XML e inserimento tirato da here:

XML:

<Products> 
    <Product> 
    <SKU>1</SKU> 
    <Desc>Book</Desc> 
    </Product> 
    <Product> 
    <SKU>2</SKU> 
    <Desc>DVD</Desc> 
    </Product> 
    <Product> 
    <SKU>3</SKU> 
    <Desc>Video</Desc> 
    </Product> 
</Products> 

Inserire dichiarazione che è l'analisi XML:

INSERT INTO Products (sku, product_desc) 
SELECT X.product.query('SKU').value('.', 'INT'), 
     X.product.query('Desc').value('.', 'VARCHAR(30)') 
FROM ( 
SELECT CAST(x AS XML) 
FROM OPENROWSET(
    BULK 'C:\Products.xml', 
    SINGLE_BLOB) AS T(x) 
    ) AS T(x) 
CROSS APPLY x.nodes('Products/Product') AS X(product); 
+0

Grazie, sembra molto utile. Ma che dire di attributi come ''? –

+1

Nevermind, l'ho trovato qui .. http://pratchev.blogspot.com/2007/06/shredding-xml-in-sql-server-2005.html Guarderà questa soluzione e cercherà di implementarla. Grazie. –

+0

Mi chiedo come questo paragoni con csv/bcp in termini di prestazioni. Dire per una dimensione del file di pochi GB. –

3

ho provato questo e per 975 righe da un file XML da 1 MB, ci sono voluti circa 2,5 minuti per l'esecuzione su un PC molto veloce.

Sono passato a utilizzare OpenXml in un processo a più fasi e il processo richiede meno di un secondo.

CREATE TABLE XMLwithOpenXML 
(
    Id INT IDENTITY PRIMARY KEY, 
    XMLData XML, 
    LoadedDateTime DATETIME 
)  

INSERT INTO XMLwithOpenXML(XMLData, LoadedDateTime) 
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE() 
FROM OPENROWSET(BULK 'clients.xml', SINGLE_BLOB) AS x; 



DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)  

SELECT @XML = XMLData FROM XMLwithOpenXML WHERE ID = '1' -- The row to process  

EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML 


INSERT INTO Clients 
SELECT CustomerID, CustomerName 
FROM OPENXML(@hDoc, 'Clients/Client') 
WITH 
(
    CustomerID [varchar](50) 'ID', 
    CustomerName [varchar](100) 'Name' 
) 


EXEC sp_xml_removedocument @hDoc 
GO 

ho ottenuto questo da qui: http://www.mssqltips.com/sqlservertip/2899/importing-and-processing-data-from-xml-files-into-sql-server-tables/

In sostanza si carica l'XML in una tabella come un grande blob di testo, quindi si utilizza OpenXml di elaborarlo.

+0

questo ha funzionato per me - @ La versione di Ocelot20 impiegava 56 minuti per elaborare il mio file XML mentre questa versione richiedeva alcuni secondi. – Paul

Problemi correlati