为什么SQL 2005在传递sqlxml参数时调用CONVERT?

时间:2009-07-28 03:27:27

标签: sqlxml

我正在声明一个SqlXml参数并将其传递给XmlReader。然后进行参数化,SQL就可以很好地执行了。但是,当查看通过探查器执行的SQL时,我注意到它正在使用SqlXml参数并在其上调用CONVERT ...

CONVERT(xml,)

为什么服务器需要调用CONVERT,我已经传递了它有效的xml?是因为我没有定义架构吗?

我怀疑这会导致此查询性能下降。任何帮助都会很棒。

干杯

1 个答案:

答案 0 :(得分: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)

执行此操作时,SQL Server会在将CONVERT(xml,'')传递给函数之前调用它。所以看起来它作为一个字符串传递给SQL Server,即使我已经将它声明为SqlXml ...我原本希望它作为xml传递给SQL Server而不需要转换?

干杯