2009-07-28 12 views
0

Je déclare un paramètre SqlXml et lui passe un XmlReader. Cela devient alors paramétré et le SQL est très bien exécuté. Cependant, quand on regarde le SQL qui est exécuté par profileur je remarque qu'il prend le paramètre SqlXml et appeler CONVERT sur elle ...Pourquoi SQL 2005 appelle CONVERT lorsqu'il est passé un paramètre sqlxml?

CONVERT (xml,)

Pourquoi le serveur ont besoin d'appeler CONVERT , Je l'ai déjà passé xml valide? Est-ce parce que je ne définis pas un schéma?

Je suppose que cela provoque de mauvaises performances sur cette requête. Toute aide serait fantastique.

Vive

+0

Pourrions-nous voir du code, s'il vous plaît? – lavinio

Répondre

0
... 

     command.CommandText = "SELECT * FROM MySQLFunction(@xml)"; 

     List<int> Ids = new List<int>() { 1, 2, 3, 4, 5}; 

     using (MemoryStream stream = new MemoryStream()) 
     { 
      using (XmlWriter writer = XmlWriter.Create(stream)) 
      { 
      writer.WriteStartElement("Element"); 
      foreach (int i in Ids) 
      { 
       writer.WriteElementString("Id", i.ToString()); 
      } 
      writer.WriteEndElement(); 
      writer.Flush(); 

      SqlXml sxml = new SqlXml(stream); 

      SqlParameter param = new SqlParameter(); 
      param.ParameterName = "xml"; 
      param.Value = sxml; 
      command.Parameters.Add(param); 

      SqlDataReader reader = command.ExecuteReader(); 

    ... 

MySQLFunction 

SELECT Ids.Id.value('.','int') FROM @xml.nodes('/Element/Id') as Ids(Id) 

Lorsque cela est exécuté, les appels SQL Server CONVERT (xml, '') avant de passer à la fonction. Il semble donc qu'il est passé en tant que chaîne à SQL Server même si je l'ai déclaré comme SqlXml ... Je m'attendais à ce qu'il soit transmis à SQL Server en tant que xml et pas la conversion serait nécessaire?

Cheers

Questions connexes