Estoy trabajando en una aplicación de consola para insertar datos en una base de datos MS SQL Server 2005. Tengo una lista de objetos para insertar. Aquí, he utilizado la clase Empleado como ejemplo:SQL ¿Insertar una fila o varias filas de datos?
List<Employee> employees;
Lo que puedo hacer es insertar un objeto a la vez como esto:
foreach (Employee item in employees)
{
string sql = @"INSERT INTO Mytable (id, name, salary)
values ('@id', '@name', '@salary')";
// replace @par with values
cmd.CommandText = sql; // cmd is IDbCommand
cmd.ExecuteNonQuery();
}
O puedo crear una consulta Balk inserción de esta manera:
string sql = @"INSERT INTO MyTable (id, name, salary) ";
int count = employees.Count;
int index = 0;
foreach (Employee item in employees)
{
sql = sql + string.format(
"SELECT {0}, '{1}', {2} ",
item.ID, item.Name, item.Salary);
if (index != (count-1))
sql = sql + " UNION ALL ";
index++
}
cmd.CommandType = sql;
cmd.ExecuteNonQuery();
Supongo que el último caso va a insertar filas de datos a la vez. Sin embargo, si tengo varios ks de datos, ¿hay algún límite para la cadena de consulta SQL?
No estoy seguro si una inserción con varias filas es mejor que una inserción con una fila de datos, en términos de rendimiento?
¿Alguna sugerencia para hacerlo de una mejor manera?
¿Qué tal llamar a SP en lugar de INERTE sql? El SP tomará los parámetros similares, pero dentro del SP hay compromiso para cada llamada. ¿Se revertirá la transacción si falla alguna de las llamadas al SP? –
@ Kevin, ¿por qué no CommitTransaction no aparece en Intellisense? – uSeRnAmEhAhAhAhAhA
En verdad, no sé. Voy a tener que rastrear qué @Spike – kemiller2002