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