Advertisement
8ugust

Trigger

Mar 7th, 2023
1,670
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 3.25 KB | None | 0 0
  1. -- Lý thuyết
  2.  
  3. USE NORTHWND
  4.  
  5.  
  6. BEGIN TRANSACTION
  7.     DELETE FROM CustomerTrans
  8.     INSERT INTO CustomerTrans VALUES('ABCEEF', 'VN_COMPANY')
  9. IF @@ERROR != 0
  10.     ROLLBACK TRAN
  11. ELSE
  12.     COMMIT TRAN
  13.  
  14. ----
  15. GO
  16.  
  17. BEGIN TRY
  18.     BEGIN TRANSACTION
  19.         DELETE FROM CustomerTrans
  20.         INSERT INTO CustomerTrans VALUES('ABCEEF', 'VN_COMPANY')
  21.     COMMIT TRAN
  22. END TRY
  23. BEGIN CATCH
  24.     ROLLBACK TRAN
  25. END CATCH
  26.  
  27. GO
  28. ---
  29. /*
  30. TRIGGER là một thủ tục đặc biệt tự động thực thi khi sự kiện gắn với nó
  31.  
  32. ? Khi nào thì gọi trigger
  33. - có 2 loại: Sau khi sự kiện chạy / Hoặc thay vì chạy sự kiện sẽ thành trigger
  34.  
  35. */
  36.  
  37. USE NORTHWND
  38. GO
  39.  
  40. SELECT CustomerID, CompanyName INTO CustomerTemp
  41. FROM dbo.Customers
  42.  
  43. go
  44. ALTER TRIGGER dbo.tr_CustomerTemp_I
  45. ON dbo.CustomerTemp
  46.  
  47. AFTER INSERT
  48. AS
  49.     PRINT N'Bạn vừa thêm mới ' + CAST(@@ROWCOUNT AS VARCHAR) + N' dòng'
  50. GO
  51.  
  52. INSERT INTO dbo.CustomerTemp
  53. (
  54.     CustomerID,
  55.     CompanyName
  56. )
  57. VALUES
  58. (   N'ABCED', -- CustomerID - nchar(5)
  59.     N'VNI Company'  -- CompanyName - nvarchar(40)
  60.     )
  61.  
  62.  
  63. /*
  64. 1.  Tạo một thủ tục với
  65. Đầu vào: là mã hoá đơn (OrderID),  ngày hoá đơn, ProductId, số lượng sản phẩm (quantity)
  66. Thủ tục thực hiện các công việc sau:
  67. -   Cập nhật ngày hoá đơn cho hoá đơn có mã là OrderID
  68. -   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
  69. 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.
  70. */
  71.  
  72. CREATE PROCEDURE UpdateOrderAndProductPrice
  73.     @OrderID int,
  74.     @OrderDate datetime,
  75.     @ProductID int,
  76.     @Quantity int
  77. AS
  78. BEGIN
  79.     BEGIN TRY
  80.         BEGIN TRANSACTION;
  81.             -- Cập nhật Orderdate
  82.             UPDATE Orders
  83.             SET OrderDate = @OrderDate
  84.             WHERE OrderID = @OrderID;
  85.  
  86.             -- Cập nhật giá
  87.             UPDATE Products
  88.             SET UnitPrice = UnitPrice * 1.2 -- Increase price by 20%
  89.             WHERE ProductID = @ProductID;
  90.  
  91.         COMMIT TRANSACTION;
  92.  
  93.         PRINT N'Cập nhật thành công'
  94.  
  95.     END TRY
  96.     BEGIN CATCH
  97.         PRINT N'Có lỗi khi cập nhật';
  98.         ROLLBACK TRANSACTION;
  99.     END CATCH
  100. END
  101.  
  102.  
  103. /*
  104. 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].
  105. */
  106. GO
  107. CREATE TRIGGER KiemTraKhiThemMoi_T1 ON [Order Details]
  108. AFTER INSERT, UPDATE
  109. AS
  110. BEGIN
  111.   IF EXISTS (
  112.     SELECT *
  113.     FROM [Order Details] od JOIN Products p ON od.ProductID = p.ProductID
  114.     WHERE p.Discontinued = 1
  115.     )
  116.   BEGIN
  117.     RAISERROR(N'Sản phẩm đã ngừng bán', 16, 1)
  118.     ROLLBACK TRANSACTION
  119.   END
  120. END
  121.     INSERT INTO dbo.[Order Details]
  122.     (
  123.         OrderID,
  124.         ProductID,
  125.         UnitPrice,
  126.         Quantity,
  127.         Discount
  128.     )
  129.     VALUES
  130.     (   10888,       -- OrderID - int
  131.         5,       -- ProductID - int
  132.         21.35, -- UnitPrice - money
  133.         12, -- Quantity - smallint
  134.         0  -- Discount - real
  135.         )
  136.  
  137. /*
  138. 3.  Tạo một Instead of triggers để thực hiện công việc kiểm tra như bài 2.
  139. */
  140.  
  141.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement