Код: Выделить всё
using (var cmd = connection.CreateCommand())
{
cmd.CommandText = "INSERT INTO #Ids VALUES (@0);";
cmd.Parameters.Add(cmd.CreateParameter() { ParameterName = "@0", DbType = DbType.Integer });
cmd.Prepare();
foreach (var value in values)
{
((IDbDataParameter)cmd.Parameters[0]).Value = value;
cmd.ExecuteNonQuery();
}
}
Код: Выделить всё
using (var cmd = connection.CreateCommand())
{
cmd.CommandText = "INSERT INTO #Ids SELECT * FROM @0;";
var param = cmd.CreateParameter();
param.ParameterName = "@0";
// FIXME more properties
cmd.Parameters.Add(param);
param.Value = values.Cast().Select((x) => {
// FIXME Create new SqlDataRecord
}.ToList();
cmd.ExecuteNonQuery();
}
Как мне заполнить комментарии FIXME выше?
Связанный вопрос, нет хороших ответов: как мне создать временную таблицу в SQL Server, если у меня есть большой список идентификаторов
В комментариях есть запрос на более широкую картину. На самом деле не существует хорошего способа получить больше информации, уменьшив масштаб. Существует ровно одна копия процедуры, которая устанавливает аргументы для всех вызовов SQL (читай: хранимых процедур) в базе кода, и это все.
Коэффициент масштабирования для количества строк имеет толстый хвост. ; среднее количество строк меньше 10, но максимальный размер очень велик, и вызовы с числом более тысячи происходят регулярно. Таким образом мы загружаем временную таблицу; и при преобразовании, чтобы сделать что-то кроме цикла foreach, мы все равно загружаем временную таблицу.
Завтра мне нужно проверить, как передать параметры значения таблицы в хранимую процедуру из . net code является эффективной целью для обмана или нет.
Подробнее здесь: https://stackoverflow.com/questions/786 ... datarecord
Мобильная версия