ei der Ausführung von @SQL-Abfragen tritt eine Zeitüberschreitung auf, die in SQL Server Management Studio @ schnell auftrit

Ich habe ein C # -Programm, das eine SQL-Abfrage mit dem unten aufgeführten Code ausführt. Ich benutze diesen Code seit einer Weile ohne Probleme bis zum anderen Tag.

Ich übergebe eine Abfragezeichenfolge an SQL, die eine Liste von Zeichenfolgen enthält, bei denen es sich um Bestandskennungen handelt. Vor ein paar Tagen habe ich es ausgeführt und die Abfrage ist abgelaufen. Wenn ich es zulasse, wird es mehr als eine Stunde dauern. Ich habe in den letzten Tagen versucht, dies zu debuggen. In meiner ursprünglichen Abfrage gab es ungefähr 900 Bezeichner.

Ich habe versucht, alles zu ändern, was mir einfällt, und erhalte Ergebnisse, die ich nicht erklären kann.

Beispielsweise

die Abfrage funktioniert mit einer Liste von Beständen, aber nicht mit einer anderen Liste mit der gleichen Länge in Bezug auf die Anzahl der Zeichenfolgen und die Gesamtlänge

it funktioniert mit einer Liste, aber nicht mit derselben Liste in umgekehrter Reihenfolge

mit einer Liste funktioniert es, wenn es genau 900 Bezeichner gibt, aber nicht, wenn es 899 oder 901 gibt, und ich kann verschiedene Bezeichner einschließen oder ausschließen und die gleichen Ergebnisse erzielen, sodass es mit einem der Bezeichner nicht komisch ist.

In jedem dieser Fälle habe ich die Abfragezeichenfolge erfasst, die von meinem Programm übergeben und in SQL Server Management Studio kopiert wird, und in jedem Fall wird die Abfrage in 1 Sekunde ausgeführt.

Ich habe in diesem und in anderen Foren alles Mögliche über Abfragen gelesen, die in SQL Server Management Studio ausgeführt werden. Beim Ausführen eines Programms tritt jedoch eine Zeitüberschreitung auf. Dies scheint jedoch insofern anders zu sein, als ich Fälle finden kann, in denen dies fehlschlägt, und ähnliche Fälle, in denen dies nicht der Fall ist. ' nicht funktionieren.

Ich würde mich über Vorschläge freuen, wo ich nachsehen könnte, was los sein könnte.

using (SqlConnection conn = new SqlConnection(_connectString))
{
    conn.Open();

    using (SqlCommand cmd = new SqlCommand(queryString, conn))
    {
        cmd.Parameters.Clear();
        cmd.CommandTimeout = _timeout;

        SqlParameter param;

        if (parms != null)
        {
            foreach (string parm in parms.Keys)
            {
                param = cmd.Parameters.AddWithValue(parm, parms[parm]);
            }
        }

        SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            QueryResult record = new QueryResult();
            record.Fields = new List<object>();

            for (int i = 0; i < returnColumns; ++i)
            {
                object value = reader.GetValue(i);

                if (value == DBNull.Value)
                    record.Fields.Add(null);
                else
                    record.Fields.Add(value);
            }

            result.Add(record);
        }

        reader.Close();
    }

    conn.Close();
}

Hier ist meine Frage. In dieser Version habe ich 65 Aktien und es funktioniert nicht (<= 64 funktioniert).

select
    distinct a.Cusip
,   d.Value_ / f.CumAdjFactor as split_adj_val

from qai.prc.PrcScChg a

join qai.dbo.SecMapX b
    on a.Code = b.venCode
    and b.VenType = 1
    and b.exchange = 1
    and b.Rank = (select Min(Rank) from qai.dbo.SecMapX where VenCode = a.Code and VenType = 1 and Exchange = 1)

join qai.dbo.SecMapX b2
    on b2.seccode = b.seccode
    and b2.ventype = 40
    and b2.exchange = 1
    and b2.Rank = (select Min(Rank) from qai.dbo.SecMapX where SecCode = b.SecCode and VenType = 40 and Exchange = 1)

join qai.dbo.SecMapX b3
    on b3.seccode = b.seccode
    and b3.ventype = 33
    and b3.exchange = 1
    and b3.Rank = (select Min(Rank) from qai.dbo.SecMapX where SecCode = b.SecCode and VenType = 33 and Exchange = 1)

join qai.dbo.DXLSecInfo c
    on b2.VenCode = c.Code

join qai.dbo.DXLAmData d
    on c.Code = d.Code
    and d.Date_ = @Date
    and d.Item = 6

left JOIN qai.dbo.DS2Adj f 
    ON f.InfoCode = b3.VenCode
    AND f.AdjType = 2
    and f.AdjDate <= @Date
    and ( f.EndAdjDate >= @Date or f.EndAdjDate is null )

where 
    a.cusip in ('00101J10', '00105510', '00120410', '00130H10', '00206R10',
    '00282410', '00287Y10', '00289620', '00724F10', '00817Y10', '00846U10',
    '00915810', '00936310', '00971T10', '01381710', '01535110', '01741R10',
    '01849010', '02000210', '02144110', '02209S10', '02313510', '02360810',
    '02553710', '02581610', '02687478', '03027X10', '03073E10', '03076C10',
    '03110010', '03116210', '03209510', '03251110', '03265410', '03741110',
    '03748R10', '03783310', '03822210', '03948310', '04621X10', '05276910',
    '05301510', '05329W10', '05333210', '05348410', '05361110', '05430310',
    '05493710', '05722410', '05849810', '06050510', '06405810', '06738310',
    '07181310', '07373010', '07588710', '07589610', '08143710', '08467070',
    '08651610', '09062X10', '09247X10', '09367110', '09702310', '09972410')

Antworten auf die Frage(4)

Ihre Antwort auf die Frage