Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Lý thuyết
- USE NORTHWND
- BEGIN TRANSACTION
- DELETE FROM CustomerTrans
- INSERT INTO CustomerTrans VALUES('ABCEEF', 'VN_COMPANY')
- IF @@ERROR != 0
- ROLLBACK TRAN
- ELSE
- COMMIT TRAN
- ----
- GO
- BEGIN TRY
- BEGIN TRANSACTION
- DELETE FROM CustomerTrans
- INSERT INTO CustomerTrans VALUES('ABCEEF', 'VN_COMPANY')
- COMMIT TRAN
- END TRY
- BEGIN CATCH
- ROLLBACK TRAN
- END CATCH
- GO
- ---
- /*
- TRIGGER là một thủ tục đặc biệt tự động thực thi khi sự kiện gắn với nó
- ? Khi nào thì gọi trigger
- - có 2 loại: Sau khi sự kiện chạy / Hoặc thay vì chạy sự kiện sẽ thành trigger
- */
- USE NORTHWND
- GO
- SELECT CustomerID, CompanyName INTO CustomerTemp
- FROM dbo.Customers
- go
- ALTER TRIGGER dbo.tr_CustomerTemp_I
- ON dbo.CustomerTemp
- AFTER INSERT
- AS
- PRINT N'Bạn vừa thêm mới ' + CAST(@@ROWCOUNT AS VARCHAR) + N' dòng'
- GO
- INSERT INTO dbo.CustomerTemp
- (
- CustomerID,
- CompanyName
- )
- VALUES
- ( N'ABCED', -- CustomerID - nchar(5)
- N'VNI Company' -- CompanyName - nvarchar(40)
- )
- /*
- 1. Tạo một thủ tục với
- Đầu vào: là mã hoá đơn (OrderID), ngày hoá đơn, ProductId, số lượng sản phẩm (quantity)
- Thủ tục thực hiện các công việc sau:
- - Cập nhật ngày hoá đơn cho hoá đơn có mã là OrderID
- - Cập nhật giá thành của mỗi sản phẩm. Tăng thêm 20% cho mỗi sản phẩm
- Các công việc này phải thực hiện cùng nhau. Nếu có lỗi thì phục hồi lại trạng thái dữ liệu trước khi thực hiện.
- */
- CREATE PROCEDURE UpdateOrderAndProductPrice
- @OrderID int,
- @OrderDate datetime,
- @ProductID int,
- @Quantity int
- AS
- BEGIN
- BEGIN TRY
- BEGIN TRANSACTION;
- -- Cập nhật Orderdate
- UPDATE Orders
- SET OrderDate = @OrderDate
- WHERE OrderID = @OrderID;
- -- Cập nhật giá
- UPDATE Products
- SET UnitPrice = UnitPrice * 1.2 -- Increase price by 20%
- WHERE ProductID = @ProductID;
- COMMIT TRANSACTION;
- PRINT N'Cập nhật thành công'
- END TRY
- BEGIN CATCH
- PRINT N'Có lỗi khi cập nhật';
- ROLLBACK TRANSACTION;
- END CATCH
- END
- /*
- 2. Tạo một After triggers thực hiện kiểm tra khi thêm mới, cập nhật thông tin sản phẩm vào bảng [Order Details]. Công việc kiểm tra như sau: kiểm tra trong bảng Product, nếu sản phẩm đó đã ngừng bán (Discontinued = 1) thì không cho phép thêm mới và cập nhật sản phẩm vào trong bảng [Order Details].
- */
- GO
- CREATE TRIGGER KiemTraKhiThemMoi_T1 ON [Order Details]
- AFTER INSERT, UPDATE
- AS
- BEGIN
- IF EXISTS (
- SELECT *
- FROM [Order Details] od JOIN Products p ON od.ProductID = p.ProductID
- WHERE p.Discontinued = 1
- )
- BEGIN
- RAISERROR(N'Sản phẩm đã ngừng bán', 16, 1)
- ROLLBACK TRANSACTION
- END
- END
- INSERT INTO dbo.[Order Details]
- (
- OrderID,
- ProductID,
- UnitPrice,
- Quantity,
- Discount
- )
- VALUES
- ( 10888, -- OrderID - int
- 5, -- ProductID - int
- 21.35, -- UnitPrice - money
- 12, -- Quantity - smallint
- 0 -- Discount - real
- )
- /*
- 3. Tạo một Instead of triggers để thực hiện công việc kiểm tra như bài 2.
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement