我正在声明一个 SqlXml 参数并将其传递给 XmlReader。然后将其参数化,并且 SQL 得到很好的执行。但是,当查看通过探查器执行的 SQL 时,我注意到它正在获取 SqlXml 参数并在其上调用 CONVERT ......
转换 (xml, )
为什么服务器需要调用 CONVERT,我已经传递了有效的 xml?是因为我没有定义模式吗?
我怀疑这会导致此查询的性能不佳。任何帮助都会很棒。
干杯
我正在声明一个 SqlXml 参数并将其传递给 XmlReader。然后将其参数化,并且 SQL 得到很好的执行。但是,当查看通过探查器执行的 SQL 时,我注意到它正在获取 SqlXml 参数并在其上调用 CONVERT ......
转换 (xml, )
为什么服务器需要调用 CONVERT,我已经传递了有效的 xml?是因为我没有定义模式吗?
我怀疑这会导致此查询的性能不佳。任何帮助都会很棒。
干杯
...
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 ...
干杯