Bulk Update in SQL Server:

Bulk Update in SQL Server: 


Example:

CREATE PROCEDURE BulkUpdate

    @FilePath NVARCHAR(500)  -- Path to the single CSV file containing both Orders and OrderDetails data

AS

BEGIN

    BEGIN TRY

        BEGIN TRANSACTION;


        -- Create temporary staging tables for Orders and OrderDetails

        CREATE TABLE #TempOrders (

            OrderID INT,

            CustomerID INT,

            OrderDate DATETIME,

            TotalAmount DECIMAL(18, 2)

        );


        CREATE TABLE #TempOrderDetails (

            OrderDetailID INT,

            OrderID INT,

            ProductID INT,

            Quantity INT,

            UnitPrice DECIMAL(18, 2)

        );


        -- Bulk insert data from the single CSV file into the #TempOrders table

        BULK INSERT #TempOrders

        FROM @FilePath

        WITH (

            FIELDTERMINATOR = ',',  -- Assuming comma-separated values

            ROWTERMINATOR = '\n',    -- Assuming newline-separated rows

            FIRSTROW = 2            -- Skips the header row

        );


        -- Bulk insert data into #TempOrderDetails (you need to filter the file or adapt this section)

        -- Assuming the OrderDetails data starts from a certain row or can be identified in the file.

        BULK INSERT #TempOrderDetails

        FROM @FilePath

        WITH (

            FIELDTERMINATOR = ',',  

            ROWTERMINATOR = '\n',    

            FIRSTROW = 2            

        );


        -- Step 1: Merge Orders data

        MERGE INTO Orders AS target

        USING #TempOrders AS source

        ON target.OrderID = source.OrderID

        WHEN MATCHED THEN

            UPDATE SET 

                target.CustomerID = source.CustomerID,

                target.OrderDate = source.OrderDate,

                target.TotalAmount = source.TotalAmount

        WHEN NOT MATCHED BY TARGET THEN

            INSERT (OrderID, CustomerID, OrderDate, TotalAmount)

            VALUES (source.OrderID, source.CustomerID, source.OrderDate, source.TotalAmount);


        -- Step 2: Merge OrderDetails data

        MERGE INTO OrderDetails AS target

        USING #TempOrderDetails AS source

        ON target.OrderDetailID = source.OrderDetailID

        WHEN MATCHED THEN

            UPDATE SET 

                target.Quantity = source.Quantity,

                target.UnitPrice = source.UnitPrice

        WHEN NOT MATCHED BY TARGET THEN

            INSERT (OrderDetailID, OrderID, ProductID, Quantity, UnitPrice)

            VALUES (source.OrderDetailID, source.OrderID, source.ProductID, source.Quantity, source.UnitPrice);


        -- Step 3: Commit the transaction if everything is successful

        COMMIT TRANSACTION;


    END TRY

    BEGIN CATCH

        -- In case of error, roll back the transaction and raise the error

        ROLLBACK TRANSACTION;

        THROW;

    END CATCH;

END;





Execution:

EXEC BulkUpdate @FilePath = 'D:\data\orders_details.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