2008-11-19 8 views
2

J'écris une procédure stockée CLR pour prendre des données XML sous la forme d'une chaîne, puis utiliser les données pour exécuter certaines commandes etc.Transfert de grandes quantités de XML à une procédure stockée CLR

Le problème que je En cours d'exécution, chaque fois que j'essaie d'envoyer du code XML supérieur à 4 000 caractères, une erreur se produit, car l'objet XmlDocument ne peut pas charger le code XML, car la plupart des balises de fermeture sont manquantes. après 4000 caractères.

Je pense que ce problème se résume à la procédure stockée CLR mappant le paramètre string sur nvarchar (4000), quand je pense que quelque chose comme nvarchar (max) ou ntext serait ce dont j'ai besoin.

Malheureusement, je ne trouve pas de mappage d'un type .NET sur ntext, et le type de chaîne passe automatiquement à nvarchar (max).

Est-ce que quelqu'un connaît une solution à mon problème?

Merci pour toute aide

Répondre

0

Pour les procédures stockées CLR, char, varchar, texte, ntext, image, curseur, utilisateur de définir les types de table et table ne peuvent être spécifiés en tant que paramètres.

Vous devriez pouvoir le type nvarchar (max) au lieu du type ntext.

2

Je pense que vous voulez le type System.Data.SqlTypes.SqlXml. Par exemple:

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Data.SqlTypes; 
using System.Xml; 

using Microsoft.SqlServer.Server; 

public partial class StoredProcedures 
{ 
    [SqlProcedure] 
    public static void StoredProcedure1(SqlXml data) 
    { 
     using (XmlReader reader = data.CreateReader()) 
     { 
      reader.MoveToContent(); 
      // Do stuff here. 
     } 
    } 
}; 
0

ntext disparaîtra dans les futures versions de SQL Server vous devez donc utiliser nvarchar (MAX) à la place.

Questions connexes