Advertisement
detective1711

BAITAP1_DBMS

Jan 31st, 2015
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 7.33 KB | None | 0 0
  1. --BAITHI - ITPLANET
  2. ---------------------------
  3. DROP DATABASE BAITHI
  4. GO
  5. CREATE DATABASE BAITHI
  6. GO
  7. USE BAITHI
  8. GO
  9. IF EXISTS (SELECT * FROM SysObjects WHERE name = 'LOI') DROP TABLE LOI
  10. IF EXISTS (SELECT * FROM SysObjects WHERE name = 'DOITUONG') DROP TABLE DOITUONG
  11. IF EXISTS (SELECT * FROM SysObjects WHERE name = 'VIPHAM') DROP TABLE VIPHAM
  12. GO
  13. CREATE TABLE LOI
  14. (
  15. MALOI CHAR(4) PRIMARY KEY,
  16. NOIDUNG nvarchar(50),
  17. MUCTIENPHAT money
  18. )
  19. GO
  20. CREATE TABLE DOITUONG
  21. (
  22. MADT CHAR(4) PRIMARY KEY,
  23. HOTEN nvarchar(50),
  24. CMND VARCHAR(50),
  25. DIACHI nvarchar(50),
  26. BIENKS VARCHAR(50),
  27. TONGTIENPHAT money
  28. )
  29. GO
  30. CREATE TABLE VIPHAM
  31. (
  32. MALOI CHAR(4) ,
  33. MADT CHAR(4),
  34. THOIDIEMVP smalldatetime,
  35. NGAYHEN smalldatetime,
  36. PRIMARY KEY (MALOI,MADT)
  37. )
  38. GO
  39. --1 . KHAI BÁO KHÓA NGOẠI CHO CÁC BẢNG
  40. ALTER TABLE VIPHAM ADD CONSTRAINT FK_MALOI FOREIGN KEY (MALOI) REFERENCES LOI (MALOI)
  41. ALTER TABLE VIPHAM ADD CONSTRAINT FK_MADT FOREIGN KEY (MADT) REFERENCES DOITUONG (MADT)
  42. --2. NHẬP LIỆU CHO CÁC BẢNG
  43. INSERT INTO LOI VALUES ('L01',N'Không đội mũ bảo hiểm','200000');
  44. INSERT INTO LOI VALUES ('L02',N'Vượt đèn đỏ','400000');
  45. INSERT INTO LOI VALUES ('L03',N'Chuyển hướng không có tín hiệu','300000');
  46.  
  47. INSERT INTO DOITUONG VALUES ('DT01',N'Nguyễn Văn A','272123123',N'Đồng Nai','60L1-1234','600000');
  48. INSERT INTO DOITUONG VALUES ('DT02',N'Trần Thị B','021999777',N'TP.HCM','59T1-22.334','300000');
  49. INSERT INTO DOITUONG VALUES ('DT03',N'Hồ Văn C','283666555',N'Bình Dương','61U2-6789','0');
  50.  
  51. INSERT INTO VIPHAM VALUES ('L01','DT01','12/27/2014','01/03/2015');
  52. INSERT INTO VIPHAM VALUES ('L02','DT01','12/27/2014','01/06/2015');
  53. INSERT INTO VIPHAM VALUES ('L03','DT02','01/20/2015','01/27/2015');
  54.  
  55. --3. HIỆN THỰC RÀNG BUỘC TOÀN VẸN: Tổng tiền phạt (TONGTIENPHAT) của một đối tượng là tổng mức tiền phạt (MUCTIENPHAT)
  56. --của các lỗi mà người đó đã vi phạm.
  57. --các thao tác gây ra lỗi
  58. --1: thêm một đối tượng mới vào bảng DOITUONG
  59. --2.Khi thêm một vi phạm mới vào bảng VIPHAM
  60. --3.Khi sửa thuộc tính (TONGTIENPHAT) trong bảng DOITUONG
  61. --4.Khi xóa quan hệ VIPHAM
  62. --5. khi sửa thuộc tính (MUCTIENPHAT) trong bảng LOI
  63.  
  64. --1.thêm một đối tượng mới vào bảng DOITUONG
  65. GO
  66. CREATE TRIGGER TG_3
  67. ON DOITUONG
  68. FOR INSERT
  69. AS
  70.   BEGIN
  71.       DECLARE @TONGTIENPHAT money
  72.      
  73.       IF((SELECT TONGTIENPHAT FROM inserted)=0)
  74.        BEGIN
  75.         print ('Thêm thành công')
  76.       END
  77.       ELSE
  78.           ROLLBACK  TRANSACTION
  79.    END  
  80.    
  81.  
  82.  
  83. INSERT INTO DOITUONG VALUES ('DT05',N'Trần Thị NGọc','021999777',N'TP.HCM','59T1-22.334','0');
  84.              
  85. INSERT INTO VIPHAM VALUES ('L02','DT05','12/27/2014','02/06/2015');
  86. INSERT INTO VIPHAM VALUES ('L03','DT05','01/20/2015','02/27/2015');    
  87. --2.Khi thêm một vi phạm mới vào bảng VIPHAM
  88.  
  89. GO
  90.  
  91. CREATE TRIGGER TG_3_2
  92. ON VIPHAM
  93. FOR INSERT
  94. AS
  95.   BEGIN
  96.     DECLARE @MALOI CHAR(4)
  97.     DECLARE @MADT CHAR(4)
  98.     SELECT @MALOI=MALOI ,@MADT=MADT  FROM INSERTED
  99.    IF(NOT EXISTS (SELECT @MALOI,@MADT
  100.                   FROM LOI, VIPHAM, DOITUONG))
  101.            BEGIN
  102.              UPDATE DOITUONG
  103.              SET TONGTIENPHAT=TONGTIENPHAT+L.MUCTIENPHAT
  104.              FROM LOI L, DOITUONG DT
  105.              WHERE L.MALOI=@MALOI AND DT.MADT=@MADT
  106.             PRINT('Thêm thành công')
  107.            END  
  108.    END
  109.  
  110. INSERT INTO VIPHAM VALUES ('L06','DT08','01/20/2015','01/27/2015');
  111.    GO
  112.  
  113. --3.3: Update TONGTIENPHAT in DOITUONG
  114. DROP TRIGGER TGG_3_3
  115. GO
  116. CREATE TRIGGER TGG_3_3
  117. ON DOITUONG
  118. FOR UPDATE
  119. AS
  120.     BEGIN
  121.         DECLARE @MADT CHAR(4)
  122.         SELECT @MADT=MADT FROM INSERTED
  123.         DECLARE @TONGTIENPHAT MONEY
  124.         SELECT @TONGTIENPHAT=TONGTIENPHAT FROM INSERTED
  125.         IF(NOT EXISTS (SELECT * FROM VIPHAM WHERE MADT=@MADT))
  126.             BEGIN
  127.                 RAISERROR('Đối tượng này chưa từng vi phạm, không nên vu oan như vậy =)) ', 16,1)
  128.                 ROLLBACK TRAN
  129.             END
  130.         DECLARE @TMP MONEY
  131.         SELECT @TMP= SUM(MUCTIENPHAT) FROM VIPHAM, LOI WHERE VIPHAM.MADT=@MADT AND VIPHAM.MALOI=LOI.MALOI GROUP BY VIPHAM.MADT
  132.         IF(@TONGTIENPHAT<> @TMP)
  133.             BEGIN
  134.             DECLARE @stmp VARCHAR(200)
  135.             SET @stmp=CONVERT(VARCHAR(200),@TMP)
  136.                 RAISERROR('Tổng tiền phạt phải bằng %s',16,1,@stmp)
  137.                 ROLLBACK TRAN
  138.             END
  139.     END
  140. GO
  141.  
  142. UPDATE DOITUONG SET TONGTIENPHAT=200000 WHERE MADT='DT04'
  143.  
  144. GO
  145. --3.4.Khi xóa quan hệ VIPHAM
  146.  
  147. CREATE TRIGGER TG_3_4
  148. ON VIPHAM
  149. FOR DELETE
  150. AS
  151.   BEGIN
  152.     DELETE FROM DOITUONG WHERE MADT=(SELECT MADT
  153.      
  154.                                                FROM INSERTED);
  155.     DELETE FROM LOI WHERE MALOI=(SELECT MALOI
  156.                                              FROM INSERTED );
  157.                                              
  158.   END        
  159.   GO
  160.   DELETE FROM VIPHAM
  161.          WHERE MALOI='L01'
  162.          
  163.   DELETE FROM VIPHAM
  164.          WHERE MADT='DT01'                                            
  165.  GO  
  166.  
  167. SELECT*
  168. FROM VIPHAM
  169.  
  170. --3.5. khi sửa thuộc tính (MUCTIENPHAT) trong bảng LOI
  171.  
  172. GO
  173. DROP TRIGGER TG_3_5
  174. GO
  175. CREATE TRIGGER TG_3_5
  176. ON LOI
  177. FOR UPDATE
  178. AS
  179.   BEGIN
  180.    DECLARE @MUCTIENPHAT_CU MONEY
  181.    DECLARE @MUCTIENPHAT_MOI MONEY
  182.    DECLARE @MALOI CHAR(4)
  183.    SELECT @MALOI=MALOI FROM INSERTED
  184.    SELECT @MUCTIENPHAT_MOI=MUCTIENPHAT FROM INSERTED
  185.    SELECT @MUCTIENPHAT_CU=MUCTIENPHAT FROM DELETED WHERE MALOI=@MALOI
  186.    
  187.    
  188.    IF(@MUCTIENPHAT_MOI<>@MUCTIENPHAT_CU)
  189.    BEGIN
  190.         DECLARE @CHENHLECH MONEY
  191.         SET @CHENHLECH=@MUCTIENPHAT_MOI-@MUCTIENPHAT_CU
  192.          UPDATE DOITUONG
  193.          SET TONGTIENPHAT=TONGTIENPHAT+@CHENHLECH
  194.          WHERE MADT IN (SELECT MADT FROM VIPHAM WHERE MALOI=@MALOI)
  195.      PRINT('Update thành công!!')
  196.     END
  197.     ELSE PRINT('GIá trị mới và giá trị cũ bằng nhau!')  
  198. END
  199. GO
  200. UPDATE LOI
  201. SET MUCTIENPHAT =2000000
  202. WHERE MALOI='L01'
  203.  
  204. GO
  205. --Câu 4:
  206. ----Bảng tầm AH:
  207. -----------------------------------------------------------------
  208. ---------|    INSERT    |    DELETE    |       UPDATE        |---
  209. --+------+--------------+--------------+---------------------+---
  210. --|  LOI |      -       |      -       |   +(MUCTIENPHAT)    |---
  211. --+------+--------------+--------------+---------------------+---
  212. --|VIPHAM|      +       |      -       |+(THOIDIEMVP,NGAYHEN)|---
  213. --+------+--------------+--------------+---------------------+---
  214. -----------------------------------------------------------------
  215. DROP TRIGGER TGG_4_1
  216. GO
  217. CREATE TRIGGER TGG_4_1
  218. ON LOI
  219. FOR UPDATE
  220. AS
  221.     BEGIN
  222.         DECLARE @MUCTIENPHAT money
  223.         DECLARE @MALOI CHAR(4)
  224.         SELECT @MUCTIENPHAT=MUCTIENPHAT FROM INSERTED
  225.         SELECT @MALOI=MALOI FROM INSERTED
  226.         IF(@MUCTIENPHAT>300000)
  227.             BEGIN
  228.                 UPDATE VIPHAM
  229.                 SET NGAYHEN= DATEADD(DAY,10,THOIDIEMVP)
  230.                 WHERE MALOI=@MALOI AND DATEDIFF(DAY,THOIDIEMVP,NGAYHEN)<10
  231.                 PRINT('Update thành công!')
  232.             END
  233.         ELSE PRINT('Mức tiền phạt <300k')
  234.     END
  235. GO
  236.  
  237. UPDATE LOI
  238. SET MUCTIENPHAT=500000
  239. WHERE MALOI='L01'
  240.  
  241. GO
  242.  
  243. CREATE TRIGGER TGG_4_2
  244. ON VIPHAM
  245. FOR INSERT, UPDATE
  246. AS
  247.     BEGIN
  248.         DECLARE @MALOI CHAR(4)
  249.         SELECT @MALOI=MALOI FROM INSERTED
  250.         IF(SELECT MUCTIENPHAT FROM LOI WHERE MALOI=@MALOI)>300000
  251.             BEGIN
  252.                 IF(SELECT DATEDIFF(DAY,THOIDIEMVP,NGAYHEN) FROM INSERTED)<10
  253.                     BEGIN
  254.                         RAISERROR('Ngày hẹn phải sau thời điểm vi phạm ít nhất 10 ngày!',16,1)
  255.                         ROLLBACK TRAN
  256.                     END
  257.             END
  258.     END
  259. GO
  260. INSERT INTO VIPHAM VALUES('L01','DT03','12/27/2014','1/3/2015')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement