BULK INSERT in SQL SERVER

BULK INSERT

BULK INSERT is a SQL Server command used to efficiently load large amounts of data from a file (usually a CSV or a text file) into a SQL Server table. It's more efficient than inserting data row by row, especially for large datasets, as it minimizes the overhead associated with logging and locking.

 

Syntax:

BULK INSERT <TableName>
FROM '<FilePath>'
WITH (
    FIELDTERMINATOR = '<Delimiter>',
    ROWTERMINATOR = '<RowDelimiter>',
    FIRSTROW = <RowNumber>,  -- Optional
    LASTROW = <RowNumber>,   -- Optional
    CODEPAGE = '<CodePage>', -- Optional
    TABLOCK                 -- Optional
);

 

FIELDTERMINATOR: Specifies the delimiter separating fields (e.g., , for CSV).

ROWTERMINATOR: Specifies the delimiter separating rows (e.g., \n or \r\n).

FIRSTROW and LASTROW: Control which rows are imported (useful if you want to skip headers or limit the rows).

CODEPAGE: Specifies the character encoding (e.g., 65001 for UTF-8).

TABLOCK: Option to apply a table-level lock for better performance during the insert.

 

Example:

BULK INSERT Orders

FROM 'C:\Data\Orders.csv'

WITH (

    FIELDTERMINATOR = ',',

    ROWTERMINATOR = '\n',

    FIRSTROW = 2

);

 

Example using stored Procdure:

 CREATE PROCEDURE BulkInsertOrdersAndDetails
    @OrdersFilePath NVARCHAR(255),
    @OrderDetailsFilePath NVARCHAR(255)
AS
BEGIN
    BEGIN TRANSACTION;
 
    BEGIN TRY
        BULK INSERT Orders
        FROM @OrdersFilePath
        WITH (
            FIELDTERMINATOR = ',',
            ROWTERMINATOR = '\n',
            FIRSTROW = 2
        );
 
        BULK INSERT OrderDetails
        FROM @OrderDetailsFilePath
        WITH (
            FIELDTERMINATOR = ',',
            ROWTERMINATOR = '\n',
            FIRSTROW = 2
        );
 
        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION;
 
        PRINT 'Error occurred during BULK INSERT: ' + ERROR_MESSAGE();
    END CATCH
END; 

 

Calling Stored Procedure:

EXEC BulkInsertOrdersAndDetails  @OrdersFilePath = 'C:\Data\Orders.csv', @OrderDetailsFilePath = 'C:\Data\OrderDetails.csv';

 

Comments

Popular posts from this blog

Multiline to singleline IN C# - CODING

EF Core interview questions for beginners

EF Core interview questions for experienced