2012-04-29 45 views
6

tôi đang tìm kiếm những ví dụ trên Microsoft.com ở đây:Bulk Import XML vào SQL Server

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

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

Nhưng nó nói trong một phần của nó là bước mà VBScript mã có được thực thi , và tôi đã không thể tìm thấy nơi VBScript nên được thực hiện. Có thể thực thi trong SQL Server không?

Mã từ trang web trông giống như sau:

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 

này trông giống như nó có thể được thực hiện trong asp cổ điển hoặc một cái gì đó, nhưng tôi muốn giữ nó bên trong SQL Server. Có ai biết làm thế nào để thực hiện một cái gì đó như thế này tất cả với trong SQL Server? hoặc có ai có một phương pháp tốt hơn cho nhập khẩu số lượng lớn XML vào máy chủ SQL?

+0

Bạn có thể sử dụng VB6, Visual Basic cho ứng dụng IDE từ Office (Word, Excel, PP, v.v.): Alt + F11> Chèn> Mô-đun> 'Kiểm tra phụ() \ n ... mã nguồn .. \ nEnd Sub ') hoặc VbsEdit. –

+2

VBScript? Tại sao bạn bắt đầu từ bài viết KB 7 năm và tài liệu SQL Server 2000? Tại sao bạn không bắt đầu tại [tài liệu này] (http://msdn.microsoft.com/en-us/library/ms191184 (v = sql.100) .aspx), gần đây hơn, hướng đến nền tảng bạn đang thực sự bật và mất khoảng 20 giây để xác định vị trí là lần truy cập hàng đầu thông qua tìm kiếm "XML nhập khẩu hàng loạt vào SQL Server", câu cuối cùng trong câu hỏi của bạn? –

Trả lời

11

Máy chủ SQL có khả năng đọc XML và chèn nó khi bạn cần. Dưới đây là một ví dụ về một tập tin XML và chèn kéo từ 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> 

Chèn tuyên bố đó là phân tích cú pháp 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

Cảm ơn bạn, điều này có vẻ rất hữu ích. Nhưng làm thế nào về các thuộc tính như ''? –

+1

Nevermind, tìm thấy nó ở đây .. http://pratchev.blogspot.com/2007/06/shredding-xml-in-sql-server-2005.html Sẽ xem xét giải pháp này và cố gắng thực hiện nó. Cảm ơn bạn. –

+0

Tôi tự hỏi làm thế nào điều này so sánh với csv/bcp trong hiệu suất. Nói cho một kích thước tập tin của một vài GB. –

3

Tôi cố gắng này và cho 975 hàng từ một tệp XML 1MB, điều này mất khoảng 2,5 phút để thực thi trên một máy tính rất nhanh.

Tôi đã chuyển sang sử dụng OpenXml trong quy trình và quy trình nhiều bước mất chưa đến một giây.

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 

tôi nhận này từ đây: http://www.mssqltips.com/sqlservertip/2899/importing-and-processing-data-from-xml-files-into-sql-server-tables/

Về cơ bản bạn nạp XML vào một bảng như một blob lớn của văn bản, sau đó bạn sử dụng OpenXML để xử lý nó.

+0

điều này làm việc cho tôi - @ Ocelot20 phiên bản mất 56 phút để xử lý tệp XML của riêng tôi trong khi phiên bản này mất một vài giây. – Paul

Các vấn đề liên quan