程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2005 讀取xml 文件 突破 varchar 8000 限制

SQL Server 2005 讀取xml 文件 突破 varchar 8000 限制

編輯:關於SqlServer


近公司與一家供應商合作,要求把供應商的XML 數據導入到我公司的數據庫中,以方便業務處理.我公司使用的是SQL Server 2005 數據庫.查了一下幫助文件,很簡單的寫了個腳本,如下:

SELECT * into #temp1 FROM OPENROWSET(
   BULK 'D:700000015.XML' ,SINGLE_CLOB  ) AS x
 DECLARE @hdoc int
 DECLARE @doc varchar(8000)
select @doc=BulkColumn  from #temp1

EXEC sp_XML_preparedocument @hdoc OUTPUT,@doc

SELECT * into #temp2
FROM OPENXML (@hdoc, '/AA/BB,2)
with  (A varchar(50),B varchar(50),C varchar(50)     )

exec sp_XML_removedocument @hdoc

先是使用一個較小的文件,測試了一下,通過.但當使用真正數據時,提示說XML 標記沒有閉合.經查看,原來並沒有把所有的數據都寫入到@doc中,於是又找幫助,@doc 可以使用ntext ,text ,xml ,varchar,char等類型.試著改為ntext,text 都沒有成功,原因是ntext ,text  類型不能直接定義成變量.於是使用了SQL Server 2005 的類型新成員:XML.結果是500KB以下的文件全部通過.當文件大於500KB時,還是報錯.於是有回去看幫助.試著把SINGLE_CLOB   改為SINGLE_BLOB  .最終解決了問題.由於沒有時間測試更大的文件,我只是試了在800KB以內的文件.其實,SINGLE_BLOB  代表的是varbinary(max)類型.能有多長是根據它來限制的.

最終更改如下:

SELECT * into #temp1 FROM OPENROWSET(
   BULK 'D:700000015.XML' ,SINGLE_BLOB  ) AS x
 DECLARE @hdoc int
 DECLARE @doc XML

select @doc=BulkColumn  from #temp1

EXEC sp_XML_preparedocument @hdoc OUTPUT,@doc

SELECT * into #temp2
FROM OPENXML (@hdoc, '/AA/BB,2)
with  (A varchar(50),B varchar(50),C varchar(50)     )

exec sp_XML_removedocument @hdoc

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved