2009-05-28 21 views
1

我使用的OpenXML而宣告我可以上去變量最大的就是8000個字符加載XML在SQL:如何克服OpenXML的8000字符限制?

DECLARE @xml_text varchar(8000) 

由於文字,NTEXT是不允許其他選擇做什麼要與OPENXML使用我必須在SQL中加載整個XML(超過20000個字符)?

+0

值得一提的是,查詢瀏覽器將截斷很長的VARCHAR處理的輸出(任何超過8000,我認爲)。如果您在查詢結果中看不到您的整個XML字符串,請不要感到驚訝 - 整個字符串仍將發送到您的應用程序。 – Daniel 2009-05-28 18:17:06

回答

4

你應該能夠如果您使用SQL 2005或更好的,你可以使用XML數據類型本身使用VARCHAR(最大值)(SQL 2005及更高版本)

DECLARE @idoc int 
DECLARE @doc varchar(max) 
SET @doc = ' 
<myxml> 
<node nodeid="1" nodevalue="value 1"> 

</node> 

</myxml>' 
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc 
SELECT 
    * 
FROM 
    OPENXML (@idoc, '/myxml/node',1) WITH (nodeid varchar(10), nodevalue varchar(20)) 
+0

呃,爲什麼在這裏使用sp_xml_prepareddocment?不要忘記用sp_xml_removedocument清理它! CAbbott的答案是更好的答案。 – ScottE 2010-10-15 00:17:49

+0

因爲當時(一年多前),我對SQL中的XML數據類型並不熟悉。是的,CAbbott擁有更好的解決方案。 – CodeLikeBeaker 2010-10-18 14:18:13

4

。這樣,您就能夠避免使用OPENXML:

DECLARE @XDoc XML 
SET @XDoc = '<Customer> 
       <FirstName>Fred</FirstName> 
       <LastName>Flinstone</LastName> 
      </Customer> 
      <Customer> 
       <FirstName>Barney</FirstName> 
       <LastName>Rubble</LastName> 
      </Customer>' 

SELECT 
    Tbl.Col.value('FirstName[1]', 'VARCHAR(MAX)'), 
    Tbl.Col.value('LastName[1]', 'VARCHAR(MAX)') 
FROM @XDoc.nodes('/Customer') Tbl(Col)