I've got a log file which is 248 MB and it can extend up to a GB. So you can imagine how many rows there can be.I need to import all the rows into a table in an SQL Server database. For that I first create a DataTable and add all the lines in the log file into that DataTable as new rows. This happens pretty fast. More than a million records get added to the table in about 30 seconds. After the table is filled with the lines I then import the records in the DataTable to the database using stored procedure. However this phase executes very heavily. Now I wonder, if I should use SqlBulkCopy WriteToServer method instead or should I keep with this way? If SqlBulkCopy is a better choise then should I use DataTable or IDataReader version. Thanks in advance.
Should I use SqlBulkCopy or Stored Procedure to import data
2.8k Views Asked by Mikayil Abdullayev At
1
There are 1 best solutions below
Related Questions in SQL-SERVER-2005
- sqlsrv_query doesn't return false on faulty T-SQL query
- PHP error connecting to MS SQL 2005 using CodeIgniter
- SQL Insert Date Mystery on 2012 from 2005
- SQL Server 2000 query conversion
- How to compare two date in SQL Server 2005?
- Different SELECT's for an INSERT INTO
- Selecting from a column with Ampersand(&)
- Get Parent and grand parents of a particular child
- UPDATE after INSERT for potentially multiple rows - not working
- Is there a way to re-write this SQL query using a WITH clause or any other CTE that might be even better?
- Get Active Directory Name From SQL User ID
- vb.net auto update datagridview when database change
- sql query to join and concat values
- UNION ALL on 2 tables select with Cases
- LEFT JOIN on multiple columns with unwanted duplicates
Related Questions in C#-4.0
- Passing arguments to main in C using Eclipse
- kernel module does not print packet info
- error C2016 (C requires that a struct or union has at least one member) and structs typedefs
- Drawing with ncurses, sockets and fork
- How to catch delay-import dll errors (missing dll or symbol) in MinGW(-w64)?
- Configured TTL for A record(s) backing CNAME records
- Allocating memory for pointers inside structures in functions
- Finding articulation point of undirected graph by DFS
- C first fgets() is being skipped while the second runs
- C std library don't appear to be linked in object file
- gcc static library compilation
- How to do a case-insensitive string comparison?
- C programming: Create and write 2D array of files as function
- How to read a file then store to array and then print?
- Function timeouts in C and thread
Related Questions in BULK-LOAD
- Hbase BulkLoad without mapreduce
- Why BULK INSERT/BCP includes Sort operator although I have done everything to avoid that? (SQL Server 2012)
- Bulk load in multiple MapR table
- Creating graph in titan from data in csv - example wiki.Vote gives error
- Postgres Bulk load using control card
- How to perform bulk upload in mongoose (node.js)
- Apache Phoenix Bulk Data Loading - Can't use table name by small letter
- Couchbase Server on Mac: cbdocloader not installed
- MS SQLXML. Import XML with specified namespace
- How can I get SSIS to view a drive mounted on a NAS?
- Cassandra bulk loader to load from compressed CSV files
- HBase bulk load spawn high number of reducer tasks - any workaround
- Import a list of users from flat file to AD group
- Example of XSD for a simple table to load into SQL Server using XML Bulk Load
- Can I temporarily pause the RDF bulk loading process for a while and then recover it back to process?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
I would go with SqlBulkCopy for data imports of any real volume like this. The performance difference vs. SqlDataAdapter can be large. e.g. I blogged as performance comparison for importing 100K rows:
SqlBulkCopy: 1.5885s
SqlDataAdapter: 25.0729s
You can get even greater throughput if you use a TableLock option with SqlBulkCopy, which in my test took the import then down to 0.8229s.
It's also worth noting that with SqlBulkCopy, you can have multiple instances bulk loading a segment of data into the same destination table in parallel without them contending with each other. Apologies for another external link, but I think it's relevant. That's about loading into a heap table, no indexes, for optimal performance, which may not be an option for your current scenario but is definitely worth knowing of.