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

乾杯

于 2009-07-30T02:06:08.563 に答える