2009-05-28 5 views
1

Je chargement d'un XML dans SQL en utilisant OpenXML en déclarant la variable au maximum je peux aller jusqu'à 8000 est: caractèresComment surmonter la limite de 8000 caractères d'OpenXML?

DECLARE @xml_text varchar(8000) 

Depuis texte, ntext n'est pas autorisé à utiliser avec d'autres alternatives OpenXML ce que font je dois charger tout le XML (plus de 20000 caractères) en SQL?

+0

Il convient de mentionner que le navigateur de requêtes tronque la sortie de varchars vraiment longues (quoi que ce soit plus de 8000 je pense). Ne soyez pas surpris si vous ne voyez pas votre chaîne XML entière apparaître dans les résultats de la requête - la chaîne entière sera toujours envoyée à votre application. – Daniel

Répondre

4

Vous devriez pouvoir utiliser varchar (max) (SQL 2005 et plus)

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

Pourquoi l'utilisation de sp_xml_prepareddocment ici? N'oubliez pas de nettoyer cela avec sp_xml_removedocument! La réponse de CAbbott est meilleure. – ScottE

+0

Parce qu'à l'époque (il y a plus d'un an), je n'étais pas familier avec le type de données XML dans SQL. Oui, CAbbott a la meilleure solution. – CodeLikeBeaker

4

Si vous utilisez SQL Server 2005 ou mieux, vous pouvez utiliser le type de données XML lui-même. De cette façon, vous seriez en mesure d'éviter d'utiliser 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) 
+0

Ceci est la bonne réponse. Si vous faites du XML dans SQL Server 2005 et que vous n'utilisez pas le type de données XML. C'est comme utiliser un marteau pour marteler une vis. Bien sûr, cela fonctionne mais ce n'est pas le bon outil pour le travail. – DBAndrew

Questions connexes