Wenn ich aus irgendeinem Grund versuche, eine Liste mit 10.000 IDs von einem C#-Webserver als Tabellenwertparameter an SQL Server zu übergeben, Nur ein Teil der IDs (~7.000) wird letztendlich an den Server gesendet (mit Trace validiert).
Ist das ein bekanntes Problem oder gibt es Konfigurationen, die ich festlegen kann, um sicherzustellen, dass alle Werte werden übergeben?
Ich habe den folgenden Typ in SQL Server erstellt:
Code: Select all
CREATE TYPE [dbo].[IntList] AS TABLE([ID] [int] NULL)
Code: Select all
CREATE PROCEDURE [dbo].[spStackOverflowQuestionExample]
@Ids dbo.IntList READONLY,
Code: Select all
var dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
foreach (var id in ids)
{
dt.Rows.Add(id);
}
parameters.Add(new SqlParameter { ParameterName = "@Ids", Value = dt, SqlDbType = SqlDbType.Structured });
Ich habe online gelesen, dass es Leuten gelungen ist, zu bestehen große Tabellenwertparameter für gespeicherte Prozeduren:
https://www.dbdelta.com/sql-server-tvp- ... e-gotchas/
Gibt es andere Möglichkeiten, dies zu tun?
Ich habe versucht, die Anfrage auf dem Server in verschiedene Aufrufe aufzuteilen, suche aber immer noch nach einer Lösung, um mehrere Roundtrips vom Server zur Datenbank zu vermeiden.