實務上有時候需要直接在SQL SERVER上讀取XML檔案內容後,與現有的資料庫資料表內容做合併,當然首先要想辦法將XML檔案讀出來,然後將原本的XML內容轉換成資料表的欄位格式後,再將原本要整合的資料表資料合併。
我的方法如下:
1. 首先要將SQL SERVER 2005的xp_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
2008/7/22 23:50|
閱讀數 : 740
|
我要推薦
|
|
文章分類:
SQL資料庫技術
訂閱
DotBlogs Tags:
SQLServer
XML