...
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 に渡されるように見えます... SQL Server に xml として渡されると予想され、変換は必要ありませんか?
乾杯