По какой-то причине при попытке передать список из 10 000 идентификаторов в SQL Server с веб-сервера C# в качестве параметра с табличным значением, только часть идентификаторов (~7000) в конечном итоге отправляется на сервер (проверяется с помощью трассировки).
Это известная проблема или существуют конфигурации, которые я могу настроить, чтобы гарантировать, что все ценности прошло?
Я создал в SQL Server следующий тип:
Код: Выделить всё
CREATE TYPE [dbo].[IntList] AS TABLE([ID] [int] NULL)
Код: Выделить всё
CREATE PROCEDURE [dbo].[spStackOverflowQuestionExample]
@Ids dbo.IntList READONLY,
Код: Выделить всё
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 });
Я читал в Интернете, что людям удавалось передать большие табличные параметры для хранимых процедур:
https://www.dbdelta.com/sql-server-tvp- Performance-gotchas/
Есть ли другие способы сделать это?
Я пробовал группировать запрос на сервере в разные вызовы, но все еще ищу решение, позволяющее избежать многократного обращения от сервера к базе данных.
Подробнее здесь: https://stackoverflow.com/questions/793 ... tored-proc