diff --git a/1-select-tasks/33.txt b/1-select-tasks/33.txt new file mode 100644 index 0000000..9dc4d55 --- /dev/null +++ b/1-select-tasks/33.txt @@ -0,0 +1,80 @@ +DROP PROCEDURE dbo.UpdateOrder; +DROP TYPE dbo.OrderDetailsList; + +CREATE + TYPE dbo.OrderDetailsList AS TABLE + ( + ProductID INT, + UnitPrice MONEY, + Quantity SMALLINT, + Discount REAL + ); + +CREATE + PROCEDURE dbo.UpdateOrder + @OrderDetailsList AS dbo.OrderDetailsList READONLY, + @OrderID INT, + @CustomerID NCHAR(5), + @EmployeeID INT, + @OrderDate DATETIME, + @RequiredDate DATETIME, + @ShippedDate DATETIME, + @ShipVia INT, + @Freight MONEY, + @ShipName NVARCHAR(40), + @ShipAddress NVARCHAR(60), + @ShipCity NVARCHAR(15), + @ShipRegion NVARCHAR(15), + @ShipPostalCode NVARCHAR(10), + @ShipCountry NVARCHAR(15) + AS + BEGIN TRY + BEGIN TRANSACTION + UPDATE + dbo.Orders + SET + CustomerID = @CustomerID, + EmployeeID = @EmployeeID, + OrderDate = @OrderDate, + RequiredDate = @RequiredDate, + ShippedDate = @ShippedDate, + ShipVia = @ShipVia, + Freight = @Freight, + ShipName = @ShipName, + ShipAddress = @ShipAddress, + ShipCity = @ShipCity, + ShipRegion = @ShipRegion, + ShipPostalCode = @ShipPostalCode, + ShipCountry = @ShipCountry + WHERE OrderID = @OrderID + + DELETE FROM [Order Details] + WHERE OrderId = @OrderId + + INSERT + dbo.[Order Details]( + ProductID, + UnitPrice, + Quantity, + Discount + ) + SELECT @OrderId + ProductID, + UnitPrice, + Quantity, + Discount + FROM @OrderDetailsList; + COMMIT; + END TRY + BEGIN CATCH + ROLLBACK; + END CATCH + +-- Run + +DECLARE @OrderDetailsL AS dbo.OrderDetailsList +INSERT @OrderDetailsL (ProductID, UnitPrice, Quantity, Discount) +VALUES (42, 30, 12, 0.15) +DECLARE @dt DATETIME +SET @dt=GETDATE() +EXEC dbo.UpdateOrder @OrderDetailsL, 102554, 'SIODE', 2, @dt, @dt, @dt, 5, 46, 'Fologr', 'Wolski Zajazd', 'ul. Filtrowa 68', 'Warszawa', NULL, '01-012', 'Poland';