軟體開發的天空


SINCE 2004

最新回應

實務上有時候需要直接在SQL SERVER上讀取XML檔案內容後,與現有的資料庫資料表內容做合併,當然首先要想辦法將XML檔案讀出來,然後將原本的XML內容轉換成資料表的欄位格式後,再將原本要整合的資料表資料合併。

我的方法如下:
1.      首先要將SQL SERVER 2005xp_cmdshell 功能啟用,隨後我們將使用xp_cmdshell來讀取XML的檔案內容。
2.      應用SQL SERVER 2005 OPENXML來處理XML內容結構,至於OPENXML的相關參數,請參考SQL SERVER Online Help
3.      請將以下的XML內容儲存成Root.xml檔,並置於c:\下。
 
    <ROOT>
<Customer>
   <CustomerID>VINET</CustomerID>
   <ContactName>Paul Henriot</ContactName>
   <Order OrderID="10248" CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
      <OrderDetail ProductID="11" Quantity="12"/>
      <OrderDetail ProductID="42" Quantity="10"/>
   </Order>
</Customer>
<Customer>    
   <CustomerID>LILAS</CustomerID>
   <ContactName>Carlos Gonzlez</ContactName>
   <Order OrderID="10283" CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
      <OrderDetail ProductID="72" Quantity="3"/>
   </Order>
</Customer>
</ROOT>

4.      利用 SQL SERVER Management Studio來執行以下指令:

 

如此你就可以應用XML檔案內容了。

DECLARE @FileName varchar(255)
DECLARE @Cmd VARCHAR(255)
DECLARE @cnt INT
DECLARE @Idt INT
DECLARE @xmlContent VARCHAR(max)
CREATE TABLE #tempXML(PK INT NOT NULL IDENTITY(1,1), Line VARCHAR(max))
SELECT @FileName = 'C:\root.xml'
SELECT @Cmd = 'type ' + @FileName
SELECT @xmlContent = ''
INSERT INTO #tempXML EXEC master.dbo.xp_cmdshell @Cmd
SELECT @cnt = count(*) from #tempXML
SELECT @Idt = 0
WHILE @Idt <> @cnt
    BEGIN
        SELECT @Idt = @Idt + 1
        SELECT @xmlContent = @xmlContent + Line from #tempXML WHERE PK = @Idt
    END
SELECT @xmlContent as xmlContent
DECLARE @XmlDocumentHandle int
EXEC sp_xml_preparedocument @XmlDocumentHandle OUTPUT, @xmlContent
SELECT    *
FROM      OPENXML (@XmlDocumentHandle, '/ROOT/Customer',2)
           WITH (CustomerID  varchar(10),
                 ContactName varchar(20))
EXEC sp_xml_removedocument @XmlDocumentHandle
DROP TABLE #tempXML

參考:
1.http://www.builderau.com.au/architect/webservices/soa/Reading-an-XML-file-from-SQL-Server/0,339024590,339174685,00.htm
2.http://msdn.microsoft.com/en-us/library/ms186918.aspx

 


DotBlogs Tags: SQLServer XML

回應

目前沒有回應.

*標  題:

*姓  名:

  電子郵件: (將不會被顯示)

  個人網頁:

*回應

登入後使用進階評論

Please add 1 and 5 and type the answer here: