sql >> Databasteknik >  >> RDS >> Sqlserver

Infoga hela DataTable i databasen på en gång istället för rad för rad?

Jag upptäckte att SqlBulkCopy är ett enkelt sätt att göra detta och kräver inte att en lagrad procedur ska skrivas i SQL Server.

Här är ett exempel på hur jag implementerade det:

// take note of SqlBulkCopyOptions.KeepIdentity , you may or may not want to use this for your situation.  

using (var bulkCopy = new SqlBulkCopy(_connection.ConnectionString, SqlBulkCopyOptions.KeepIdentity))
{
      // my DataTable column names match my SQL Column names, so I simply made this loop. However if your column names don't match, just pass in which datatable name matches the SQL column name in Column Mappings
      foreach (DataColumn col in table.Columns)
      {
          bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
      }

      bulkCopy.BulkCopyTimeout = 600;
      bulkCopy.DestinationTableName = destinationTableName;
      bulkCopy.WriteToServer(table);
}


  1. 4 sätt att kontrollera om en tabell finns innan du släpper den i SQL Server (T-SQL)

  2. Oracle radantal av tabell efter antal(*) mot NUM_ROWS från DBA_TABLES

  3. Förenkla kapslade fall när-sats

  4. Hur tar man reda på om en upsert var en uppdatering med PostgreSQL 9.5+ UPSERT?