Advertisement
Guest User

Untitled

a guest
Aug 17th, 2019
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 32.20 KB | None | 0 0
  1. CREATE DATABASE BookStore
  2. GO
  3.  
  4. USE BookStore
  5. GO
  6.  
  7. CREATE TABLE CATEGORY
  8. (
  9.     id VARCHAR(50) PRIMARY KEY,
  10.     category_title NVARCHAR(50),
  11.     category_description TEXT
  12. )
  13. GO
  14.  
  15. CREATE TABLE LOCATION
  16. (
  17.     id VARCHAR(50) PRIMARY KEY,
  18.     location_name NVARCHAR(256) NOT NULL,
  19.     max_storage INT CHECK(max_storage > 0),
  20.     [description] NVARCHAR(256)
  21. )
  22. GO
  23.  
  24. CREATE TABLE AUTHOR
  25. (
  26.     id INT IDENTITY (100, 1) PRIMARY KEY,
  27.     fullname NVARCHAR(256) NOT NULL,
  28.     date_of_birth DATE,
  29.     date_of_death DATE NULL,
  30.     image NVARCHAR(256),
  31.     introduce NVARCHAR(256),
  32.     created_date DATE,
  33. )
  34. GO
  35.  
  36. CREATE TABLE PUBLISHER
  37. (
  38.     id INT IDENTITY (100, 1) PRIMARY KEY,
  39.     name NVARCHAR(256) NOT NULL,
  40.     phone_number VARCHAR(13),
  41.     email VARCHAR(100) NOT NULL,
  42.     address NVARCHAR(200),
  43.     introduce NVARCHAR(256),
  44.     created_date DATE
  45. )
  46. GO
  47.  
  48. CREATE TABLE BOOK
  49. (
  50.     id VARCHAR(50) PRIMARY KEY,
  51.     title NVARCHAR(100) NOT NULL,
  52.     category_id VARCHAR(50) NOT NULL,
  53.     page_num INT,
  54.     author_id INT FOREIGN KEY REFERENCES dbo.AUTHOR(id),
  55.     amount INT ,
  56.     publisher_id INT FOREIGN KEY REFERENCES dbo.PUBLISHER(id),
  57.     publication_year INT,
  58.     price MONEY,
  59.     image NVARCHAR(256),
  60.     location_id VARCHAR(50),
  61.     description NVARCHAR(256),
  62.     introduce NVARCHAR(256),
  63.     created_date DATE,
  64.     CONSTRAINT fk_cateID FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE CASCADE ON UPDATE CASCADE,
  65.     CONSTRAINT fk_book_location_id FOREIGN KEY (location_id) REFERENCES dbo.LOCATION(id) ON UPDATE CASCADE,
  66. )
  67. GO
  68.  
  69. CREATE TABLE [USER]
  70. (
  71.     id INT IDENTITY(100,1) PRIMARY KEY NOT NULL,
  72.     username VARCHAR(100) UNIQUE NOT NULL,
  73.     password VARCHAR(100) NOT NULL,
  74.     fullname NVARCHAR(50),
  75.     date_of_birth DATE,
  76.     email VARCHAR(50),
  77.     phone_number VARCHAR(14),
  78.     sex BIT,
  79.     created_date DATE
  80. )
  81. GO
  82.  
  83. CREATE TABLE [ADMIN]
  84. (
  85.     id INT IDENTITY(101,2) PRIMARY KEY NOT NULL,
  86.     username VARCHAR(50) UNIQUE NOT NULL,
  87.     password VARCHAR(50) NOT NULL,
  88.     fullName NVARCHAR(256) NOT NULL,
  89.     email VARCHAR(50) ,
  90.     phone_number VARCHAR(14) NOT NULL,
  91.     image NVARCHAR(256) NULL,
  92.     sex BIT,
  93.     ROLE INT NOT NULL,
  94.     isActive BIT,
  95.     created_date DATE
  96. )
  97. GO
  98.  
  99. CREATE TABLE STORAGE
  100. (
  101.     id INT IDENTITY(100, 1) PRIMARY KEY,
  102.     admin_id INT NOT NULL,
  103.     description NVARCHAR(256) NULL,
  104.     created_date DATE DEFAULT(GETDATE()),
  105.     CONSTRAINT fk_storage_admin_id FOREIGN KEY (admin_id) REFERENCES dbo.ADMIN(id) ON DELETE CASCADE
  106.     ON UPDATE CASCADE
  107. )
  108. GO
  109.  
  110. CREATE TABLE STORAGE_DETAIL
  111. (
  112.     storage_id INT,
  113.     book_id VARCHAR(50),
  114.     amount INT CHECK (amount > 0),
  115.     price MONEY,
  116.  
  117.     PRIMARY KEY (storage_id, book_id),
  118.     CONSTRAINT fk_storage_detail_storeage_id FOREIGN KEY (storage_id) REFERENCES dbo.STORAGE(id) ON UPDATE CASCADE ON DELETE CASCADE,
  119.     CONSTRAINT fk_storage_detail_book_id FOREIGN KEY (book_id) REFERENCES dbo.BOOK(id) ON UPDATE CASCADE ON DELETE CASCADE
  120. )
  121. GO
  122.  
  123. CREATE TABLE RENTBOOK
  124. (
  125.     id INT PRIMARY KEY IDENTITY(100, 1),
  126.     user_id INT,
  127.     admin_id INT,
  128.     cost_rent MONEY,
  129.     cost_expiration MONEY,
  130.     expiration_day SMALLINT,
  131.     created_date DATE,
  132.     returned_date DATE,
  133.     STATUS INT,
  134.     CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES [USER](id) ON DELETE CASCADE ON UPDATE CASCADE,
  135.     CONSTRAINT fk_admin1 FOREIGN KEY (admin_id) REFERENCES Admin(id) ON DELETE CASCADE ON UPDATE CASCADE
  136. )
  137. GO
  138.  
  139. CREATE TABLE RENTBOOK_DETAIL
  140. (
  141.     rentbook_id INT ,
  142.     book_id VARCHAR(50),
  143.     amount INT NOT NULL,
  144.     price money,
  145.     PRIMARY KEY (rentBook_id,book_id),
  146.     CONSTRAINT fk_renbook FOREIGN KEY (rentbook_id) REFERENCES dbo.RENTBOOK(id) ON DELETE CASCADE ON UPDATE CASCADE,
  147.     CONSTRAINT fk_bookID FOREIGN KEY (book_id) REFERENCES Book(id) ON DELETE CASCADE ON UPDATE CASCADE
  148. )
  149. GO
  150.  
  151. CREATE TABLE [ORDER]
  152. (
  153.     id INT PRIMARY KEY IDENTITY(100, 1),
  154.     user_id INT NULL,
  155.     admin_id INT,
  156.     date_created DATE
  157.     CONSTRAINT fk_Book FOREIGN KEY (user_id) REFERENCES [USER](id) ON DELETE CASCADE ON UPDATE CASCADE,
  158.     CONSTRAINT fk_ADMIN_ORDER FOREIGN KEY (admin_id) REFERENCES dbo.ADMIN(id) ON DELETE CASCADE ON UPDATE CASCADE
  159. )
  160. GO
  161.  
  162. CREATE TABLE [ORDER_DETAIL]
  163. (
  164.     order_id INT NOT NULL,
  165.     book_id VARCHAR(50) NOT NULL,
  166.     amount INT NOT NULL,
  167.     price MONEY NOT NULL,
  168.     PRIMARY KEY(order_id,book_id),
  169.     CONSTRAINT fk_order1_book FOREIGN KEY (order_id) REFERENCES [dbo].[ORDER](id) ON DELETE CASCADE ON UPDATE CASCADE,
  170.     CONSTRAINT fk_book_oder FOREIGN KEY (book_id) REFERENCES dbo.BOOK(id) ON DELETE CASCADE ON UPDATE CASCADE
  171. )
  172. GO
  173.  
  174. CREATE TABLE BOOK_LOST
  175. (
  176.     rentbook_id INT PRIMARY KEY,
  177.     admin_id INT,
  178.     cost_lost SMALLMONEY,
  179.     created_date DATE,
  180.     CONSTRAINT fk_LostBook_RentBook_id FOREIGN KEY (rentbook_id) REFERENCES [dbo].RENTBOOK(id) ON DELETE CASCADE ON UPDATE CASCADE,
  181.     CONSTRAINT fk_LostBook_Admin_id FOREIGN KEY (admin_id) REFERENCES [dbo].[ADMIN](id)
  182. )
  183. GO
  184.  
  185. CREATE TABLE BOOK_LOST_DETAIL
  186. (
  187.     rentbook_id INT,
  188.     book_id VARCHAR(50) NOT NULL,
  189.     amount INT NOT NULL CHECK (amount > 0),
  190.     cost MONEY,
  191.     PRIMARY KEY (rentbook_id, book_id),
  192.     CONSTRAINT fk_LostBook_Detail_RentBook_id FOREIGN KEY (rentbook_id) REFERENCES [dbo].BOOK_LOST(rentbook_id) ON DELETE CASCADE ON UPDATE CASCADE,
  193.     CONSTRAINT fk_LostBook__Detail_Book_id FOREIGN KEY (book_id) REFERENCES dbo.BOOK(id) ON DELETE CASCADE ON UPDATE CASCADE
  194. )
  195. GO
  196.  
  197. INSERT dbo.LOCATION ( id, location_name, max_storage, description)
  198. VALUES  ( 'A1', N'Kệ A1', 100, N''),
  199.         ( 'A2', N'Kệ A2', 120, N''),
  200.         ( 'A3', N'Kệ A3', 130, N''),
  201.         ( 'A4', N'Kệ A4', 90, N''),
  202.         ( 'A5', N'Kệ A5', 100, N''),
  203.         ( 'A6', N'Kệ A6', 100, N''),
  204.         ( 'A7', N'Kệ A7', 120, N''),
  205.         ( 'A8', N'Kệ A8', 110, N'')
  206. GO
  207.  
  208. INSERT INTO dbo.CATEGORY( id ,category_title ,category_description)
  209. VALUES  ('TT2'   ,N'Kỉ Niệm HÀ NỘI tôi' ,'71 trang'),
  210.         ('PT5',N'Đi tìm ngày xưa',''),
  211.         ('AG1',N'Sống đúng','')
  212. GO
  213.  
  214. INSERT INTO dbo.AUTHOR(fullname ,date_of_birth ,image ,introduce ,created_date)
  215. VALUES  (N'Đỗ Văn Hoàng', GETDATE(), N'', N'Tác giả này tên là Đỗ Văn Hoàng.', GETDATE()),
  216.         (N'Trần Đăng Khoa', GETDATE(), N'', N'Tác giả này nổi tiếng với các bài văn dành cho trẻ em', GETDATE()),
  217.         (N'Lê Văn Thuyết', GETDATE(), N'', N'', GETDATE())
  218. GO
  219.  
  220. INSERT INTO dbo.PUBLISHER(name, phone_number, email, introduce, created_date)
  221. VALUES  (N'BXB Trẻ', '0376546521', 'contact@nxbtre.com', N'Đây là nhà xuất bản khá trẻ :v', GETDATE()),
  222.         (N'BXB Nhi Đồng', '0186224665', 'contact@nxbnhidong.com', N'Đây là nhà xuất bản nhi đồng', GETDATE())
  223. GO
  224.  
  225. INSERT INTO dbo.BOOK (id ,title ,category_id ,page_num ,author_id ,amount ,publisher_id ,publication_year ,price ,image, location_id ,description ,created_date)
  226. VALUES  ('GH12' ,N'TÔI THẤY MÌNH CÒN TRẺ','TT2' ,274 , 100 ,96 ,100 ,2017 ,296999 , N'', 'A1' ,'' ,'11/05/2018' ),  
  227.         ('JH42' ,N'TÔI THẤY HOA VÀNG TRÊN CỎ XANH','AG1' ,274 ,102 ,96 , 101 ,2017 ,196333 , N'', 'A2' ,'' ,'11/06/2018' )
  228. GO
  229.    
  230. INSERT INTO dbo.[USER]( username ,password ,fullname ,date_of_birth ,email ,phone_number)
  231. VALUES  ( 'haond' , '123' , N'Nguyễn Văn Hao' , '1999-06-11', 'teonv@gmail.com' , '0623457413'),
  232.         ( 'nopt12' , '123' , N'Nguyễn Thị Nở' , '1993-03-11', 'nopt@gmail.com' , '054632179')
  233. GO
  234.  
  235. INSERT INTO dbo.ADMIN( username ,password ,fullName , email ,phone_number ,ROLE ,created_date)
  236. VALUES  ( 'quanly' , '123' , N'Lý Tiểu Long' , 'lytieulong@gmail.com' ,'01682439314' , 1 ,'07/05/2015'),
  237.         ('truongphong' , '123' , N'Nguyễn Đại Trân' , 'ngueyndairan@gmail.com' ,'0123456789' , 1 ,'06/05/2012')
  238. GO
  239.  
  240. INSERT INTO dbo.[ORDER](user_id ,admin_id, date_created)
  241. VALUES  ( 100 , 101, GETDATE()),
  242.         ( 101 , 103, GETDATE())
  243. GO
  244.  
  245. INSERT INTO ORDER_DETAIL(order_id , book_id, amount, price)
  246. VALUES  (100,'GH12',3,200000),
  247.         (101,'JH42', 2, 300000)
  248. GO
  249.  
  250. INSERT INTO dbo.RENTBOOK(user_id , admin_id, cost_rent, cost_expiration, expiration_day, created_date, returned_date, STATUS)
  251. VALUES  (100, 101, 5000, 1000, 7, GETDATE() , NULL, 0),
  252.         (101, 103, 5000, 1000, 7, GETDATE() , GETDATE(), 1)
  253. GO
  254.  
  255. INSERT INTO RENTBOOK_DETAIL (rentbook_id , book_id , amount, price)
  256. VALUES  (100,'GH12',3,300000),
  257.         (101,'JH42',4,400000),
  258.         (101,'GH12',2,400000)
  259. GO
  260.  
  261.  
  262. INSERT INTO dbo.STORAGE( admin_id, description, created_date)
  263. VALUES  ( 101, N'Không ghi chú gì hết', GETDATE())
  264. GO
  265.  
  266. INSERT INTO dbo.STORAGE_DETAIL ( storage_id, book_id, amount, price )
  267. VALUES  ( 100, 'GH12', 90, 250000),
  268.         ( 100, 'JH42', 50, 180000)
  269.  
  270. SELECT * FROM dbo.BOOK
  271. SELECT * FROM dbo.ORDER_DETAIL
  272. SELECT * FROM [ADMIN]
  273. GO
  274.  
  275.  
  276. /****** Object:  StoredProcedure  [sp_getOrderDetail]  Script Date: 7/17/2019 ******/
  277. --Lấy ra thông tin mã sách, số lượng và giá sách dựa vào thông tin order truyền vào
  278. CREATE PROC sp_getOrderDetail(@order_id INT)
  279. AS BEGIN
  280.     SELECT
  281.         Book.ID AS book_id,
  282.         ORDER_DETAIL.amount AS amount,
  283.         ORDER_DETAIL.price AS price
  284.     FROM dbo.BOOK
  285.         JOIN ORDER_DETAIL ON Book.ID = ORDER_DETAIL.book_id
  286.     WHERE
  287.         ORDER_DETAIL.order_id = @order_id
  288. END
  289.  
  290.  
  291. /****** Object:  StoredProcedure  [sp_getCountBook]  Script Date: 7/17/2019 ******/
  292. --Lấy về số lượng sách còn trong kho của sách có mã là @book_id
  293. GO
  294. CREATE PROC sp_getCountBook(@book_id VARCHAR(50))
  295. AS BEGIN
  296.     SELECT
  297.         amount AS amount
  298.     FROM Book
  299.     WHERE BOOK.id = @book_id
  300. END
  301. GO
  302. /****** Object:  StoredProcedure  [sp_getCountBookSold]  Script Date: 7/17/2019 ******/
  303. --Lấy về số lượng sách đã bán của sách có id là @book_id
  304. CREATE PROC sp_getCountBookSold(@book_id VARCHAR(50))
  305. AS BEGIN
  306.     SELECT
  307.         od.amount amount_sold
  308.     FROM Book b
  309.     JOIN ORDER_DETAIL od ON b.ID = od.book_id
  310.     WHERE b.id = @book_id
  311. END
  312. GO
  313.  
  314. /****** Object:  StoredProcedure  [sp_getCountBookBeingRented]  Script Date: 7/17/2019 ******/
  315. --Lấy về số lượng sách "ĐANG" được thuê của sách có id là @book_id
  316. GO
  317. CREATE PROC sp_getCountBookBeingRented(@book_id VARCHAR(50))
  318. AS BEGIN
  319.     SELECT
  320.         SUM(rd.amount)
  321.     FROM RENTBOOK_DETAIL rd
  322.         JOIN Book b ON b.ID = rd.book_id
  323.         JOIN RENTBOOK r ON r.ID = rd.rentbook_id
  324.     WHERE r.STATUS = 0 AND rd.book_id = @book_id
  325. END
  326. GO
  327.  
  328.  
  329. SELECT * FROM dbo.RENTBOOK_DETAIL
  330. EXEC dbo.sp_getCountBookBeingRented @book_id = 'GH12' -- varchar(50)
  331.  
  332. /****** Object:  StoredProcedure  [sp_getRentBookDetail]  Script Date: 7/17/2019 ******/
  333. --Từ id rentbook truyền vào, lấy ra các thông tin chi tiết của hóa đơn thuê sách
  334. GO
  335. CREATE PROC sp_getRentBookDetail(@rentbook_id INT)
  336. AS BEGIN
  337.     SELECT
  338.         BOOK.id book_id,
  339.         RENTBOOK_DETAIL.amount amount,
  340.         RENTBOOK_DETAIL.price price
  341.     FROM Book
  342.         JOIN RENTBOOK_DETAIL ON Book.ID = RENTBOOK_DETAIL.book_id
  343.     WHERE RENTBOOK_DETAIL.rentbook_id = @rentbook_id
  344. END
  345. GO
  346. /****** Object:  StoredProcedure  [sp_getBookSoldByMonth]  Script Date: 7/17/2019 ******/
  347. --Trả về thông tin thống kê sách đã bán được theo tháng
  348. GO
  349. CREATE PROC sp_getBookSoldByMonth(@MONTH INT)
  350. AS BEGIN
  351.     SELECT
  352.         Book.ID book_id,
  353.         COUNT(ORDER_DETAIL.amount) amount_sold
  354.     FROM ORDER_DETAIL
  355.         JOIN Book ON Book.ID = ORDER_DETAIL.book_id
  356.         JOIN [ORDER] ON [ORDER].ID = ORDER_DETAIL.order_id
  357.     WHERE MONTH([ORDER].Date_created) = @MONTH
  358.     GROUP BY Book.ID
  359. END
  360.  
  361. EXEC dbo.sp_getBookSoldByMonth @MONTH = 7 -- int
  362.  
  363.  
  364. /****** Object:  StoredProcedure  [sp_getIncomeByMonth]  Script Date: 7/19/2019 ******/
  365. --Trả về thông tin thống kê tiền sách thu được khi bán sách
  366. GO
  367. CREATE PROC sp_getIncomeByMonth(@MONTH INT)
  368. AS BEGIN
  369.     SELECT
  370.         BOOK.id MaSach,
  371.         SUM(ORDER_DETAIL.amount) amount_sold,
  372.         SUM( ORDER_DETAIL.price * ORDER_DETAIL.amount) money_total
  373.     FROM ORDER_DETAIL
  374.         JOIN BOOK ON ORDER_DETAIL.book_id = BOOK.id
  375.         JOIN [ORDER] ON ORDER_DETAIL.order_id = [ORDER].id
  376.         WHERE MONTH([ORDER].Date_created) = @MONTH
  377.     GROUP BY BOOK.id, ORDER_DETAIL.price, ORDER_DETAIL.amount
  378. END
  379. GO
  380.  
  381. /****** Object:  StoredProcedure  [sp_getTotalRentbook]  Script Date: 8/03/2019 ******/
  382. --Trả về tổng số sách đã thuê trong RENTBOOK_DETAIL theo renbook_id
  383. CREATE PROC sp_getTotalRentBook (@rentbook_id INT)
  384. AS BEGIN
  385.     SELECT
  386.         SUM(amount)
  387.     FROM RENTBOOK_DETAIL
  388.     WHERE rentbook_id = @rentbook_id
  389. END
  390. GO
  391.  
  392. /****** Object:  StoredProcedure  [sp_getTotalCostBookLost]  Script Date: 8/03/2019 ******/
  393. --Trả về tổng số cost có trong LostBook theo renbook_id
  394. CREATE PROC sp_getTotalCostBookLost (@rentbook_id INT)
  395. AS BEGIN
  396.     SELECT
  397.         SUM(cost)
  398.     FROM dbo.BOOK_LOST_DETAIL
  399.     WHERE rentbook_id = @rentbook_id
  400. END            
  401. GO
  402.  
  403. /****** Object:  StoredProcedure  [sp_getTotalCountBookLost]  Script Date: 8/03/2019 ******/
  404. --Trả về tổng số sách đã mất theo renbook_id
  405. GO
  406. CREATE PROC sp_getTotalCountBookLost (@rentbook_id INT)
  407. AS BEGIN
  408.     SELECT
  409.         SUM(amount)
  410.     FROM dbo.BOOK_LOST_DETAIL
  411.     WHERE rentbook_id = @rentbook_id
  412. END
  413. GO
  414.  
  415. /****** Object:  StoredProcedure  [sp_getAmountBookRented]  Script Date: 8/03/2019 ******/
  416. --Trả về tổng số sách của sách có @book_id đã thuê với đơn thuê có mã @rentbook_id
  417. GO
  418. CREATE PROC sp_getAmountBookRented (@rentbook_id INT, @book_id VARCHAR(50))
  419. AS BEGIN
  420.     SELECT
  421.         SUM(amount)
  422.     FROM RENTBOOK_DETAIL
  423.     WHERE rentbook_id = @rentbook_id AND book_id = @book_id
  424. END
  425. GO
  426.  
  427.  
  428. /****** Object:  StoredProcedure  [sp_getLostBookDetail]  Script Date: 8/03/2019 ******/
  429. --Trả về thông tin chi tiết của LOST_BOOK_DETAIL theo rentbook_id
  430. CREATE PROC sp_getLostBookDetail (@rentbook_id INT)
  431. AS BEGIN
  432.     SELECT
  433.         book_id,
  434.         amount,
  435.         cost
  436.     FROM dbo.BOOK_LOST_DETAIL
  437.     WHERE rentbook_id = @rentbook_id
  438. END
  439. GO
  440.  
  441. /****** Object:  StoredProcedure  [sp_getLostBookDetail]  Script Date: 8/04/2019 ******/
  442. --Trả về tổng số sách đã nhập trong hóa đơn nhập
  443. CREATE PROC sp_getTotalCountBookOfStorage (@storage_id INT)
  444. AS BEGIN
  445.     SELECT
  446.         SUM(amount)
  447.     FROM STORAGE_DETAIL
  448.     WHERE storage_id = @storage_id
  449. END
  450. GO
  451.  
  452. /****** Object:  StoredProcedure  [sp_getSumCountOrderSold]  Script Date: 8/07/2019 ******/
  453. --Trả về tổng số lượng sách đã bán
  454. CREATE PROC sp_getCountBookInOrder (@order_id INT)
  455. AS BEGIN
  456.     SELECT
  457.         SUM(amount)
  458.     FROM ORDER_DETAIL
  459.     WHERE order_id = @order_id
  460. END
  461. GO
  462.  
  463. /****** Object:  StoredProcedure  [sp_getSumPriceOrderSold]  Script Date: 8/07/2019 ******/
  464. --Trả về tổng số lượng sách đã bán
  465. CREATE PROC sp_getTotalPriceInOrder(@order_id INT)
  466. AS BEGIN
  467.     SELECT
  468.         SUM(price * amount)
  469.     FROM ORDER_DETAIL
  470.     WHERE order_id = @order_id
  471. END
  472. GO
  473.  
  474. /****** Object:  StoredProcedure  [sp_getTotalAmountOrderBook]  Script Date: 8/10/2019 ******/
  475. --Trả về tổng số sách đã bán
  476. CREATE PROC sp_getTotalAmountOrderBook
  477. AS BEGIN
  478.     SELECT
  479.         SUM(amount)
  480.     FROM ORDER_DETAIL
  481. END
  482. GO
  483.  
  484. /****** Object:  StoredProcedure  [sp_getStatisticOverviewInMonth]  Script Date: 8/10/2019 ******/
  485. --Trả về tổng tất cả các thứ cần thống ke :))
  486. CREATE PROC sp_getStatisticOverviewInMonth
  487. AS BEGIN
  488.     DECLARE @totalOrder FLOAT = 0
  489.     DECLARE @totalRent FLOAT = 0
  490.     DECLARE @totalLost FLOAT = 0
  491.     DECLARE @totalUser FLOAT = 0
  492.     DECLARE @totalAddStorage FLOAT = 0
  493.     DECLARE @totalRevenue FLOAT = 0
  494.  
  495.     SELECT @totalOrder = SUM(ORDER_DETAIL.amount) FROM ORDER_DETAIL, [ORDER]
  496.     WHERE ORDER_DETAIL.order_id = [ORDER].id
  497.     AND YEAR([ORDER].date_created) = YEAR(GETDATE())
  498.     AND MONTH([ORDER].date_created) = MONTH(GETDATE())
  499.    
  500.     SELECT @totalRent = SUM(RENTBOOK_DETAIL.amount) FROM RENTBOOK_DETAIL, RENTBOOK
  501.     WHERE  RENTBOOK_DETAIL.rentbook_id = RENTBOOK.id
  502.     AND YEAR(RENTBOOK.created_date) = YEAR(GETDATE())
  503.     AND MONTH(RENTBOOK.created_date) = MONTH(GETDATE())
  504.    
  505.     SELECT @totalLost = SUM(BOOK_LOST_DETAIL.amount) FROM  BOOK_LOST_DETAIL, BOOK_LOST
  506.     WHERE BOOK_LOST_DETAIL.rentbook_id = BOOK_LOST.rentbook_id
  507.     AND YEAR(BOOK_LOST.created_date) = YEAR(GETDATE())
  508.     AND MONTH(BOOK_LOST.created_date) = MONTH(GETDATE())
  509.    
  510.     SELECT @totalUser = COUNT([USER].id) FROM [USER]
  511.     WHERE YEAR([USER].created_date) = YEAR(GETDATE())
  512.     AND MONTH([USER].created_date) = MONTH(GETDATE())
  513.    
  514.     SELECT @totalAddStorage = SUM(STORAGE_DETAIL.amount) FROM STORAGE_DETAIL, STORAGE
  515.     WHERE STORAGE_DETAIL.storage_id = STORAGE.id
  516.     AND YEAR(STORAGE.created_date) = YEAR(GETDATE())
  517.     AND MONTH(STORAGE.created_date) = MONTH(GETDATE())
  518.    
  519.     DECLARE @totalSumOrder FLOAT = 0
  520.     DECLARE @totalSumLost FLOAT = 0
  521.     DECLARE @totalSumRentLost FLOAT = 0
  522.     DECLARE @totalSumMoneyStorage FLOAT = 0
  523.  
  524.     SELECT @totalSumOrder = SUM(ORDER_DETAIL.amount*ORDER_DETAIL.price)
  525.     FROM ORDER_DETAIL, [ORDER]
  526.     WHERE ORDER_DETAIL.order_id = [ORDER].id
  527.     AND YEAR([ORDER].date_created) = YEAR(GETDATE())
  528.     AND MONTH([ORDER].date_created) = MONTH(GETDATE())
  529.  
  530.     SELECT @totalSumLost = SUM(BOOK_LOST_DETAIL.cost)
  531.     FROM BOOK_LOST, BOOK_LOST_DETAIL
  532.     WHERE BOOK_LOST_DETAIL.rentbook_id = BOOK_LOST.rentbook_id
  533.     AND YEAR(BOOK_LOST.created_date) = YEAR(GETDATE())
  534.     AND MONTH(BOOK_LOST.created_date) = MONTH(GETDATE())
  535.  
  536.     SELECT @totalSumRentLost = SUM(BOOK_LOST_DETAIL.amount*RENTBOOK_DETAIL.price)
  537.     FROM BOOK_LOST, BOOK_LOST_DETAIL, RENTBOOK_DETAIL,RENTBOOK
  538.     WHERE BOOK_LOST.rentbook_id = RENTBOOK.id
  539.     AND RENTBOOK.id = RENTBOOK_DETAIL.rentbook_id
  540.     AND RENTBOOK_DETAIL.book_id = BOOK_LOST_DETAIL.book_id
  541.     AND RENTBOOK_DETAIL.rentbook_id = BOOK_LOST_DETAIL.rentbook_id
  542.     AND YEAR(RENTBOOK.created_date) = YEAR(GETDATE())
  543.     AND MONTH(RENTBOOK.created_date) = MONTH(GETDATE())
  544.     AND YEAR(BOOK_LOST.created_date) = YEAR(GETDATE())
  545.     AND MONTH(BOOK_LOST.created_date) = MONTH(GETDATE())
  546.  
  547.     SELECT @totalSumMoneyStorage = SUM(STORAGE_DETAIL.amount*STORAGE_DETAIL.price)
  548.     FROM STORAGE, STORAGE_DETAIL
  549.     WHERE STORAGE.id = STORAGE_DETAIL.storage_id
  550.     AND YEAR(STORAGE.created_date) = YEAR(GETDATE())
  551.     AND MONTH(STORAGE.created_date) = MONTH(GETDATE())
  552.  
  553.     IF (@totalLost IS NULL)
  554.         SET @totalLost = 0
  555.     IF (@totalSumOrder IS NULL)
  556.         SET @totalSumOrder = 0
  557.     IF (@totalSumRentLost IS NULL)
  558.         SET @totalSumRentLost = 0
  559.     IF (@totalSumLost IS NULL)
  560.         SET @totalSumLost = 0
  561.     IF (@totalSumMoneyStorage IS NULL)
  562.         SET @totalSumMoneyStorage = 0
  563.  
  564.     SET @totalrevenue = @totalSumLost + @totalSumOrder - @totalSumRentLost - @totalSumMoneyStorage
  565.  
  566.     SELECT @totalOrder AS [Total ORDER], @totalRent AS [Total Rent], @totalLost AS [Total Lost], @totalUser AS [Total USER], @totalAddStorage AS [Total Book Storage], @totalRevenue AS [Total imcome]
  567. END
  568. GO
  569.  
  570. EXEC sp_getStatisticOverviewInMonth
  571. GO
  572.  
  573. /****** Object:  StoredProcedure  [sp_getStatisticOrderInMonth]  Script Date: 8/13/2019 ******/
  574. --Trả về thông tin sách đã bán theo tháng // DROP PROC sp_getStatisticOrderInMonth EXEC sp_getStatisticOrderInMonth @month = 8
  575. CREATE PROC sp_getStatisticOrderInMonth (@MONTH INT)
  576. AS BEGIN
  577.     SELECT BOOK.id, BOOK.title, CATEGORY.category_title, AUTHOR.fullname, BOOK.created_date,SUM(ORDER_DETAIL.amount) AS [Total ORDER]
  578.     FROM BOOK, AUTHOR, CATEGORY, ORDER_DETAIL, [ORDER]
  579.     WHERE BOOK.category_id = CATEGORY.id
  580.     AND BOOK.author_id = AUTHOR.id
  581.     AND  ORDER_DETAIL.order_id = [ORDER].id
  582.     AND YEAR([ORDER].date_created) = YEAR(GETDATE())
  583.     AND MONTH([ORDER].date_created) = @MONTH
  584.     AND ORDER_DETAIL.book_id = BOOK.id
  585.     --them sum (price * amount) tong tien thu duoc
  586.     GROUP BY BOOK.id, BOOK.title, CATEGORY.category_title, AUTHOR.fullname, BOOK.created_date
  587. END
  588. GO
  589.  
  590. /****** Object:  StoredProcedure  [sp_getStatisticRentbookInMonth]  Script Date: 8/13/2019 ******/
  591. --Trả về thông tin sách thuê theo tháng
  592. CREATE PROCEDURE sp_getStatisticRentbookInMonth (@MONTH SMALLINT)
  593. AS
  594. BEGIN
  595.     DECLARE @book_id VARCHAR(50)
  596.     DECLARE @book_title NVARCHAR(256)
  597.     DECLARE @amount_total INT = 0
  598.     DECLARE @amount_returned INT = 0
  599.     DECLARE @amount_renting INT = 0
  600.     DECLARE @amount_expiration INT = 0
  601.  
  602.     DECLARE @tblStats TABLE
  603.     (
  604.         book_id VARCHAR(50),
  605.         book_title NVARCHAR(256),
  606.         amount_total INT,
  607.         amount_returned INT,
  608.         amount_renting INT,
  609.         amount_expiration INT
  610.     )
  611.     --Tạo con trỏ duyệt từng sách có trong phần thuê sách
  612.     IF (@MONTH != 0) -- Nếu @month khác 0 thì duyệt lấy mã sách thuê theo tháng @month
  613.         DECLARE cs  CURSOR FOR SELECT DISTINCT b.id
  614.         FROM dbo.BOOK b, dbo.RENTBOOK rb, dbo.RENTBOOK_DETAIL dt
  615.         WHERE b.id = dt.book_id AND rb.id = dt.rentbook_id
  616.         AND YEAR(rb.created_date) = YEAR(GETDATE()) AND MONTH(rb.created_date) = @MONTH
  617.     ELSE-- Nếu @month = 0 thì duyệt lấy mã sách thuê trong cả năm
  618.         DECLARE cs  CURSOR FOR SELECT DISTINCT b.id
  619.         FROM dbo.BOOK b, dbo.RENTBOOK rb, dbo.RENTBOOK_DETAIL dt
  620.         WHERE b.id = dt.book_id AND rb.id = dt.rentbook_id
  621.         AND YEAR(rb.created_date) = YEAR(GETDATE())
  622.    
  623.     OPEN cs
  624.     FETCH NEXT FROM cs INTO @book_id
  625.  
  626.     --Tiến hành lặp danh sách sách thuê và insert dữ liệu thống kê vào tblStats
  627.     WHILE @@FETCH_STATUS = 0
  628.     BEGIN
  629.         -- Set giá trị các biến trở về mặc định
  630.         SET @amount_total = 0
  631.         SET @amount_returned = 0
  632.         SET @amount_renting = 0
  633.         SET @amount_expiration = 0
  634.  
  635.         --Tên sách
  636.         SELECT @book_title = title FROM dbo.BOOK WHERE id = @book_id
  637.  
  638.         --Tổng số lượng đã thuê
  639.         SELECT @amount_total = SUM(rdt.amount)
  640.         FROM dbo.BOOK b, dbo.RENTBOOK_DETAIL rdt
  641.         WHERE b.id = rdt.book_id AND rdt.book_id = @book_id
  642.         GROUP BY b.id
  643.  
  644.         --Tổng số sách đã trả
  645.         SELECT @amount_returned = SUM(rdt.amount)
  646.         FROM dbo.BOOK b, dbo.RENTBOOK_DETAIL rdt, dbo.RENTBOOK rb
  647.         WHERE b.id = rdt.book_id
  648.         AND rdt.rentbook_id = rb.id
  649.         AND rdt.book_id = @book_id
  650.         AND rb.STATUS = 1
  651.         GROUP BY b.id
  652.  
  653.         --Tổng số sách đang còn thuê
  654.         SELECT @amount_renting = SUM(rdt.amount)
  655.         FROM dbo.BOOK b, dbo.RENTBOOK_DETAIL rdt, dbo.RENTBOOK rb
  656.         WHERE b.id = rdt.book_id
  657.         AND rdt.rentbook_id = rb.id
  658.         AND rdt.book_id = @book_id
  659.         AND rb.STATUS = 0
  660.         GROUP BY b.id
  661.  
  662.         --Tổng số sách đang quá hạn
  663.         SELECT @amount_expiration = SUM(rdt.amount)
  664.         FROM dbo.BOOK b, dbo.RENTBOOK_DETAIL rdt, dbo.RENTBOOK rb
  665.         WHERE b.id = rdt.book_id
  666.         AND rdt.rentbook_id = rb.id
  667.         AND rdt.book_id = @book_id
  668.         AND rb.STATUS = 0
  669.         AND DATEDIFF(DAY, rb.created_date, GETDATE()) > rb.expiration_day
  670.         GROUP BY b.id
  671.  
  672.         --Thêm các dữ liệu đã thống kê vào bảng tblStats
  673.         INSERT @tblStats( book_id, book_title, amount_total, amount_returned, amount_renting, amount_expiration)
  674.         VALUES  (@book_id, @book_title, @amount_total, @amount_returned, @amount_renting, @amount_expiration)
  675.  
  676.         -- Đi đến dòng tiếp theo
  677.         FETCH NEXT FROM cs INTO @book_id
  678.     END
  679.  
  680.  
  681.     --Đóng con trỏ
  682.     CLOSE cs
  683.     DEALLOCATE cs
  684.  
  685.     --Trả về bảng danh sách đã thống kê
  686.     SELECT * FROM @tblStats
  687. END
  688. GO
  689.  
  690. /****** Object:  StoredProcedure  [sp_getStatisticIncome]  Script Date: 8/13/2019 ******/
  691. --Trả về thông tin doanh thu
  692. CREATE PROCEDURE sp_getStatisticIncome (@MONTH SMALLINT)
  693. AS
  694. BEGIN
  695.     DECLARE @book_id VARCHAR(50)
  696.     DECLARE @book_title NVARCHAR(256)
  697.     DECLARE @total_cost_storage MONEY = 0
  698.     DECLARE @total_money_order MONEY = 0
  699.     DECLARE @total_money_rentbook MONEY = 0
  700.     DECLARE @total_money_penalty MONEY = 0
  701.     DECLARE @total_money_income MONEY = 0
  702.  
  703.     DECLARE @tblStats TABLE
  704.     (
  705.         book_id VARCHAR(50),
  706.         book_title NVARCHAR(256),
  707.         total_cost_storage MONEY,
  708.         total_money_order MONEY,
  709.         total_money_rentbook MONEY,
  710.         total_money_penalty MONEY,
  711.         total_money_income MONEY
  712.     )
  713.     --Tạo con trỏ duyệt từng sách có trong phần thuê sách
  714.     IF (@MONTH != 0) -- Nếu @month khác 0 thì duyệt lấy mã sách thuê theo tháng @month
  715.         DECLARE cs  CURSOR FOR SELECT DISTINCT b.id
  716.         FROM dbo.BOOK b, dbo.RENTBOOK rb, dbo.RENTBOOK_DETAIL dt
  717.         WHERE b.id = dt.book_id AND rb.id = dt.rentbook_id
  718.         AND YEAR(rb.created_date) = YEAR(GETDATE()) AND MONTH(rb.created_date) = @MONTH
  719.     ELSE-- Nếu @month = 0 thì duyệt lấy mã sách thuê trong cả năm
  720.         DECLARE cs  CURSOR FOR SELECT DISTINCT b.id
  721.         FROM dbo.BOOK b, dbo.RENTBOOK rb, dbo.RENTBOOK_DETAIL dt
  722.         WHERE b.id = dt.book_id AND rb.id = dt.rentbook_id
  723.         AND YEAR(rb.created_date) = YEAR(GETDATE())
  724.    
  725.     OPEN cs
  726.     FETCH NEXT FROM cs INTO @book_id
  727.  
  728.     --Tiến hành lặp danh sách sách thuê và insert dữ liệu thống kê vào tblStats
  729.     WHILE @@FETCH_STATUS = 0
  730.     BEGIN
  731.  
  732.  
  733.        
  734.  
  735.         -- Đi đến dòng tiếp theo
  736.         FETCH NEXT FROM cs INTO @book_id
  737.     END
  738.  
  739.  
  740.     --Đóng con trỏ
  741.     CLOSE cs
  742.     DEALLOCATE cs
  743.  
  744.     --Trả về bảng danh sách đã thống kê
  745.     SELECT * FROM @tblStats
  746. END
  747. GO
  748.  
  749.  
  750.  
  751. SELECT * FROM dbo.RENTBOOK
  752. SELECT * FROM dbo.RENTBOOK_DETAIL
  753.  
  754.  
  755.  
  756.  
  757. INSERT dbo.ADMIN
  758.         ( username ,
  759.           password ,
  760.           fullName ,
  761.           email ,
  762.           phone_number ,
  763.           image ,
  764.           sex ,
  765.           ROLE ,
  766.           isActive ,
  767.           created_date
  768.         )
  769. VALUES  ( 'haogd' , -- username - varchar(50)
  770.           '123456789' , -- password - varchar(50)
  771.           N'Đại Hào' , -- fullName - nvarchar(256)
  772.           'daihao12mc@gmail.com' , -- email - varchar(50)
  773.           '0376555796' , -- phone_number - varchar(14)
  774.           N'' , -- image - nvarchar(256)
  775.           1 , -- sex - bit
  776.           0 , -- role - int
  777.           1 , -- isActive - bit
  778.           GETDATE()  -- created_date - date
  779.         )
  780.  
  781. GO
  782.  
  783. --Gọi khi bảng order detail có insert 
  784. CREATE TRIGGER tg_InsertOrderDetail ON dbo.ORDER_DETAIL
  785. FOR INSERT
  786. AS
  787. BEGIN
  788.     DECLARE @book_id VARCHAR(50)
  789.     DECLARE @amount_insertd INT
  790.     DECLARE cs CURSOR FOR SELECT Inserted.book_id, Inserted.amount FROM Inserted
  791.    
  792.     OPEN cs
  793.     FETCH NEXT FROM cs INTO @book_id, @amount_insertd
  794.  
  795.     WHILE @@FETCH_STATUS = 0
  796.     BEGIN
  797.         --Giảm trừ số lượng đã insert vào số lượng sách đang có
  798.         UPDATE dbo.BOOK SET amount = (amount - @amount_insertd) WHERE id = @book_id
  799.  
  800.         --Di chuyển tới dòng tiếp theo
  801.         FETCH NEXT FROM cs INTO @book_id, @amount_insertd
  802.     END
  803.     CLOSE cs
  804.     DEALLOCATE cs
  805. END
  806. GO
  807.  
  808. --Gọi khi bảng order detail có delete 
  809. CREATE TRIGGER tg_DeleteOrderDetail ON dbo.ORDER_DETAIL
  810. FOR DELETE
  811. AS
  812. BEGIN
  813.     DECLARE @book_id VARCHAR(50)
  814.     DECLARE @amount_deleted INT
  815.     DECLARE cs CURSOR FOR SELECT Deleted.book_id, Deleted.amount FROM Deleted
  816.     OPEN cs
  817.  
  818.     FETCH NEXT FROM cs INTO @book_id, @amount_deleted
  819.     WHILE @@FETCH_STATUS = 0
  820.     BEGIN
  821.         --Tăng số lượng từ bảng đã xóa vào số lượng sách đang có
  822.         UPDATE dbo.BOOK SET amount = (amount + @amount_deleted) WHERE id = @book_id
  823.         FETCH NEXT FROM cs INTO @book_id, @amount_deleted
  824.     END
  825.  
  826.     CLOSE cs
  827.     DEALLOCATE cs  
  828. END
  829. GO
  830.  
  831. --Gọi khi bảng RentBookDetail có insert   
  832. CREATE TRIGGER tg_insertRentBookDetail ON dbo.RENTBOOK_DETAIL
  833. FOR INSERT
  834. AS
  835. BEGIN
  836.     DECLARE @book_id VARCHAR(50)
  837.     DECLARE @amount_inserted INT
  838.     DECLARE cs CURSOR FOR SELECT Inserted.book_id, Inserted.amount FROM Inserted
  839.     OPEN cs
  840.  
  841.     FETCH NEXT FROM cs INTO @book_id, @amount_inserted
  842.  
  843.     WHILE @@FETCH_STATUS = 0
  844.     BEGIN
  845.         --Giảm số lượng sách đang có dựa vào số lượng sách thuê đã insert
  846.         UPDATE dbo.BOOK SET amount = (amount  - @amount_inserted) WHERE id = @book_id
  847.  
  848.         --Đi tới dòng tiếp theo
  849.         FETCH NEXT FROM cs INTO @book_id, @amount_inserted
  850.     END
  851.  
  852.     CLOSE cs
  853.     DEALLOCATE cs
  854. END
  855. GO
  856.  
  857. --Gọi khi bảng RentBookDetail có delete   
  858. CREATE TRIGGER tg_deleteRentBookDetail ON dbo.RENTBOOK_DETAIL
  859. FOR DELETE
  860. AS
  861. BEGIN
  862.     DECLARE @book_id VARCHAR(50)
  863.     DECLARE @amount_deleted INT
  864.     DECLARE @rentbook_id INT
  865.     DECLARE @STATUS INT
  866.     DECLARE cs CURSOR FOR SELECT Deleted.book_id, Deleted.amount FROM Deleted
  867.    
  868.     -- Nếu xóa chi tiết của đơn thuê đã trả rồi thì ko xử lý nữa
  869.     SELECT @STATUS = STATUS FROM dbo.RENTBOOK WHERE id = @rentbook_id
  870.     IF (@STATUS = 1)
  871.         ROLLBACK
  872.  
  873.     OPEN cs
  874.     FETCH NEXT FROM cs INTO @book_id, @amount_deleted
  875.  
  876.     WHILE @@FETCH_STATUS = 0
  877.     BEGIN
  878.         --tăng số lượng sách đang có dựa vào số lượng sách thuê đã delete
  879.         UPDATE dbo.BOOK SET amount = (amount + @amount_deleted) WHERE id = @book_id
  880.  
  881.         --Di chuyển tới dòng kế tiếp
  882.         FETCH NEXT FROM cs INTO @book_id, @amount_deleted
  883.     END
  884.  
  885.     CLOSE cs
  886.     DEALLOCATE cs
  887. END
  888. GO
  889.  
  890. --Gọi khi bảng RENTBOOK có update status = 1 => đã trả sách
  891. CREATE TRIGGER tg_updateRentBook ON dbo.RENTBOOK
  892. FOR UPDATE
  893. AS
  894. BEGIN
  895.     DECLARE @STATUS INT
  896.     DECLARE @rentbook_id INT
  897.     DECLARE @book_id VARCHAR(50)
  898.     DECLARE @amount INT
  899.  
  900.     --Lấy ra mã sách và số lượng insert
  901.     SELECT @STATUS = @STATUS, @rentbook_id = @rentbook_id FROM Inserted
  902.  
  903.     --Mã status = 1 => đã trả sách
  904.     IF (@STATUS = 1)
  905.     BEGIN
  906.         DECLARE cs CURSOR FOR SELECT dt.book_id, dt.amount
  907.         FROM dbo.RENTBOOK_DETAIL dt WHERE rentbook_id = @rentbook_id
  908.  
  909.         OPEN cs
  910.         FETCH NEXT FROM cs INTO @book_id, @amount
  911.  
  912.         WHILE @@FETCH_STATUS = 0
  913.         BEGIN
  914.             --Lấy số lượng trong chi tiết + ngược lại vào số lượng sách đang có
  915.             UPDATE dbo.BOOK SET amount = (amount + @amount) WHERE id = @book_id
  916.  
  917.             --Duyệt tiếp
  918.             FETCH NEXT FROM cs INTO @book_id, @amount
  919.         END
  920.  
  921.         CLOSE cs
  922.         DEALLOCATE cs  
  923.     END
  924. END
  925. GO
  926.  
  927. --Gọi khi bảng BOOK_LOST_DETAIL có insert 
  928. CREATE TRIGGER tg_insertBookLostDetail ON dbo.BOOK_LOST_DETAIL
  929. FOR INSERT
  930. AS
  931. BEGIN
  932.     DECLARE @book_id VARCHAR(50)
  933.     DECLARE @amount_inserted INT
  934.     DECLARE cs CURSOR FOR SELECT Inserted.book_id, Inserted.amount FROM Inserted
  935.    
  936.     OPEN cs
  937.     FETCH NEXT FROM cs INTO @book_id, @amount_inserted
  938.  
  939.     WHILE @@FETCH_STATUS = 0
  940.     BEGIN
  941.         --Giảm số lượng sách đang có dựa vào số lượng sách mất đã insert
  942.         UPDATE dbo.BOOK SET amount = (amount  - @amount_inserted) WHERE id = @book_id
  943.        
  944.         --Next tới dòng kế tiếp
  945.         FETCH NEXT FROM cs INTO @book_id, @amount_inserted  
  946.     END
  947.  
  948.     CLOSE cs
  949.     DEALLOCATE cs
  950. END
  951. GO
  952.  
  953. --Gọi khi bảng BOOK_LOST_DETAIL có delete 
  954. CREATE TRIGGER tg_deleteBookLostDetail ON dbo.BOOK_LOST_DETAIL
  955. FOR DELETE
  956. AS
  957. BEGIN
  958.     DECLARE @book_id VARCHAR(50)
  959.     DECLARE @amount_deleted INT
  960.     DECLARE cs CURSOR FOR SELECT Deleted.book_id, Deleted.amount FROM Deleted
  961.  
  962.     OPEN cs
  963.     FETCH NEXT FROM cs INTO @book_id, @amount_deleted
  964.  
  965.     WHILE @@FETCH_STATUS = 0
  966.     BEGIN
  967.         --tăng số lượng sách đang có dựa vào số lượng sách mất đã deleted
  968.         UPDATE dbo.BOOK SET amount = (amount  + @amount_deleted) WHERE id = @book_id
  969.  
  970.         --Next tới dòng kế tiếp
  971.         FETCH NEXT FROM cs INTO @book_id, @amount_deleted
  972.     END
  973.  
  974.     CLOSE cs
  975.     DEALLOCATE cs
  976. END
  977. GO
  978.  
  979. --Gọi khi bảng STORAGE_DETAIL có INSERT
  980. CREATE TRIGGER tg_InsertStorageDetail ON dbo.STORAGE_DETAIL
  981. FOR INSERT
  982. AS
  983. BEGIN
  984.     DECLARE @book_id VARCHAR(50)
  985.     DECLARE @amount_insertd INT
  986.  
  987.     --Lấy ra mã sách và số lượng insert
  988.     DECLARE cs Cursor
  989.         FOR SELECT Inserted.book_id, Inserted.amount FROM Inserted
  990.     OPEN cs
  991.     Fetch NEXT FROM cs INTO @book_id, @amount_insertd
  992.     While @@FETCH_STATUS = 0
  993.     BEGIN
  994.         --Thêm số lượng đã insert vào số lượng sách đang có
  995.         UPDATE dbo.BOOK SET amount = (amount + @amount_insertd) WHERE id = @book_id
  996.        
  997.         -- Next dòng tiếp theo
  998.         Fetch NEXT FROM cs INTO @book_id, @amount_insertd
  999.     END
  1000.     close cs -- đóng con trỏ
  1001.     deallocate cs -- hủy bộ nhớ
  1002. END
  1003. GO
  1004.  
  1005. --Gọi khi bảng STORAGE_DETAIL có delete
  1006. CREATE TRIGGER tg_DeleteStorageDetail ON dbo.STORAGE_DETAIL
  1007. FOR DELETE
  1008. AS
  1009. BEGIN
  1010.     DECLARE @book_id VARCHAR(50)
  1011.     DECLARE @amount_deleted INT
  1012.     DECLARE cs CURSOR FOR SELECT Deleted.book_id, Deleted.amount FROM Deleted
  1013.  
  1014.     OPEN cs
  1015.     FETCH NEXT FROM cs INTO @book_id, @amount_deleted
  1016.  
  1017.     WHILE @@FETCH_STATUS = 0
  1018.     BEGIN
  1019.         --Giảm số lượng từ bảng đã xóa vào số lượng sách đang có
  1020.         UPDATE dbo.BOOK SET amount = (amount - @amount_deleted) WHERE id = @book_id
  1021.         --Di chuyển tới dòng kế tiếp
  1022.         FETCH NEXT FROM cs INTO @book_id, @amount_deleted
  1023.     END
  1024.     CLOSE cs
  1025.     DEALLOCATE cs
  1026. END
  1027. GO
  1028.  
  1029. SELECT * FROM dbo.RENTBOOK_DETAIL WHERE rentbook_id = 102
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036. /*
  1037. SELECT * FROM dbo.BOOK
  1038. SELECT * FROM dbo.[ORDER_DETAIL]
  1039. SELECT * FROM dbo.LOCATION
  1040. SELECT * FROM dbo.AUTHOR
  1041. SELECT * FROM dbo.PUBLISHER
  1042.  
  1043. UPDATE dbo.BOOK SET description = 'abcdef descrip' WHERE id = 'GH12'
  1044.  
  1045. SELECT * FROM dbo.[USER]
  1046. SELECT * FROM dbo.ADMIN
  1047. SELECT * FROM dbo.[ORDER]
  1048. SELECT * FROM dbo.ORDER_DETAIL
  1049. SELECT * FROM dbo.RENTBOOK
  1050. SELECT * FROM dbo.RENTBOOK_DETAIL
  1051. SELECT * FROM dbo.STORAGE_DETAIL
  1052. SELECT * FROM BOOK_LOST
  1053. DELETE FROM dbo.RENTBOOK
  1054. 261aa
  1055.  
  1056. PRINT DATEDIFF(DAY, '3/1/2011', '3/1/2011')
  1057.  
  1058. UPDATE dbo.BOOK SET amount = 0
  1059. DELETE FROM dbo.STORAGE_DETAIL WHERE storage_id = 103
  1060. GO
  1061.  
  1062. SELECT * FROM dbo.BOOK
  1063. SELECT * FROM dbo.ORDER_DETAIL
  1064.  
  1065. SELECT * FROM dbo.STORAGE
  1066. SELECT * FROM dbo.STORAGE_DETAIL
  1067.  
  1068.  
  1069. INSERT dbo.STORAGE( admin_id ,description ,created_date)
  1070. VALUES  ( 101 , N'test' , GETDATE() )
  1071.  
  1072. INSERT dbo.STORAGE_DETAIL( storage_id, book_id, amount, price )
  1073. VALUES  ( 103, 'GH12', 10,  100000 )
  1074.  
  1075. INSERT dbo.STORAGE_DETAIL( storage_id, book_id, amount, price )
  1076. VALUES  ( 103, 'JH42', 10,  100000 ),
  1077.         ( 103, 'GH12', 10,  100000 )
  1078. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement