And here's the reason why, taken from Microsoft's Rosetta White Paper.
The choice to use Transact-SQL BULK INSERT over bcp.exe or DTS was made for
performance reasons. Transact-SQL BULK INSERT executes in process with
sqlservr.exe, sharing the same memory space. Because the data files are
opened by sqlservr.exe, cross-process data copying is avoided. BCP and DTS
executables are both run out of process from sqlservr.exe and require
interprocess data marshaling in order to move data across process memory
spaces. Interprocess data marshaling is the process of converting parameters
of a method call into a stream of bytes and can add significantly to CPU
utilization. Use of BULK INSERT also saves processing time over BCP and DTS
through a more direct communication path to SQL Server. The BCP interface
(used by BCP and DTS) must convert the flat file data to ODBC, then to TDS,
and finally to OLE-DB; bulk insert can go straight to OLE-DB.
--
HTH
Ryan Waight, MCDBA, MCSE
"Alan" <anonymous (AT) discussions (DOT) microsoft.com> wrote
Quote:
Not exactly the answer, but a tip that may help:
The Bulk Insert command from within SQL server is WAY
faster than BCP from the command line.... |