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;
Comments
Post a Comment