如何克服OpenXML的8000字符限制?

时间:2009-05-28 17:46:54

标签: sql sql-server openxml sqlxml

我正在使用OpenXML在SQL中加载XML,同时声明max我可以达到的变量是8000个字符:

DECLARE @xml_text varchar(8000)

由于text,ntext不允许与openXML一起使用,我还需要在SQL中加载整个XML(超过20000个字符)吗?

2 个答案:

答案 0 :(得分:4)

您应该能够使用varchar(max)(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) )

答案 1 :(得分:4)

如果您使用的是SQL 2005或更高版本,则可以使用XML数据类型本身。这样你就可以避免使用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)