0

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

转换 (xml, )

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

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

干杯

4

1 回答 1

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, '')。因此,即使我已将其声明为 SqlXml,它看起来还是作为字符串传递给 SQL Server ...

干杯

于 2009-07-30T02:06:08.563 回答