Advertisement
SquirrelInBox

triggers

Nov 15th, 2015
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 11.98 KB | None | 0 0
  1. USE master
  2. GO
  3.  
  4. IF  EXISTS (
  5.         SELECT name
  6.                 FROM sys.DATABASES
  7.                 WHERE name = N'ElenaBeklenishcheva'
  8. )
  9. ALTER DATABASE ElenaBeklenishcheva SET single_user WITH ROLLBACK immediate
  10. GO
  11.  
  12. IF  EXISTS (
  13.         SELECT name
  14.                 FROM sys.DATABASES
  15.                 WHERE name = N'ElenaBeklenishcheva'
  16. )
  17. DROP DATABASE [ElenaBeklenishcheva]
  18. GO
  19.  
  20. CREATE DATABASE [ElenaBeklenishcheva]
  21. GO
  22.  
  23. USE [ElenaBeklenishcheva]
  24. GO
  25.  
  26. IF EXISTS(
  27.   SELECT *
  28.     FROM sys.schemas
  29.    WHERE name = N'Scheme'
  30. )
  31.  DROP SCHEMA Scheme
  32. GO
  33.  
  34. CREATE SCHEMA Scheme
  35. GO
  36.  
  37.  
  38. IF OBJECT_ID('regionsList', 'U') IS NOT NULL
  39.   DROP TABLE regionsList
  40. GO
  41.  
  42.  
  43.  
  44. CREATE TABLE regionsList(
  45.     id_region VARCHAR(3) PRIMARY KEY NOT NULL,
  46.     region_name VARCHAR(50) UNIQUE NOT NULL
  47. )
  48. GO
  49.  
  50.  
  51. IF OBJECT_ID('trigRegionsList', 'TR') IS NOT NULL
  52.     DROP TRIGGER trigRegionsList
  53. GO
  54.  
  55. CREATE TRIGGER trigRegionsList ON regionsList FOR INSERT
  56. AS
  57.     IF (EXISTS (SELECT * FROM inserted WHERE (id_region NOT LIKE ('[0-9][0-9]')))) OR
  58.         (NOT EXISTS (SELECT * FROM regionsList AS regions, inserted WHERE inserted.id_region = regions.id_region))
  59.     BEGIN
  60.         print ('Неверно задан код региона.');
  61.         ROLLBACK TRANSACTION;
  62.         RETURN
  63.     END
  64. GO
  65.  
  66. INSERT INTO regionsList(id_region, region_name) VALUES
  67. ('01', 'Республика Адыгея'),
  68. ('59', 'Пермский край'),
  69. ('66', 'Свердловская область'),
  70. ('50', 'Московская область'),
  71. ('68', 'Тамбовская область'),
  72. ('64', 'Саратовская область')
  73.  
  74. /*
  75. INSERT INTO regionsList(id_region, region_name) VALUES
  76. (546, 'Плохая область')*/
  77.  
  78.  
  79. SELECT * FROM regionsList
  80.  
  81.  
  82.  
  83. IF OBJECT_ID('regions', 'U') IS NOT NULL
  84.   DROP TABLE regions
  85. GO
  86.  
  87. CREATE TABLE regions (
  88.     id_region VARCHAR(3) NOT NULL,
  89.     region_number VARCHAR(3) PRIMARY KEY NOT NULL
  90.     FOREIGN KEY (id_region) REFERENCES regionsList(id_region)
  91. )
  92. GO
  93.  
  94. IF OBJECT_ID('trigRegions', 'TR') IS NOT NULL
  95.     DROP TRIGGER trigRegions
  96. GO
  97.  
  98. CREATE TRIGGER trigRegions ON regions FOR INSERT
  99. AS
  100.     IF (EXISTS (SELECT * FROM inserted WHERE ((id_region NOT LIKE ('[0-9][0-9]')) OR
  101.                                               (region_number NOT LIKE ('[127][0-9][0-9]')) AND
  102.                                               (region_number NOT LIKE ('[0-9][0-9]'))))) OR
  103.         (NOT EXISTS (SELECT * FROM regions, inserted WHERE ((inserted.id_region = regions.id_region)
  104.                                                         AND (inserted.region_number = regions.region_number))))
  105.     BEGIN
  106.         print ('Неверно задан код региона в таблице regions');
  107.         ROLLBACK TRANSACTION;
  108.         RETURN
  109.     END
  110. GO
  111.  
  112. INSERT INTO regions(id_region, region_number) VALUES
  113. ('01', '01'),
  114. ('59', '81'),
  115. ('59', '59'),
  116. ('59', '159'),
  117. ('66', '96'),
  118. ('66', '66'),
  119. ('50', '90'),
  120. ('50', '50'),
  121. ('50', '150'),
  122. ('50', '190'),
  123. ('64', '164'),
  124. ('64', '64')
  125.  
  126. /* несуществующий регион */
  127. INSERT INTO regions(id_region, region_number) VALUES
  128. ('50', '654')
  129. /*(50, 310)
  130. */
  131.  
  132. SELECT * FROM regions
  133.  
  134. IF OBJECT_ID('type_car', 'U') IS NOT NULL
  135.   DROP TABLE type_car
  136. GO
  137.  
  138. CREATE TABLE type_car (
  139.     type_car_id INT PRIMARY KEY NOT NULL,
  140.     type_car_name VARCHAR(12) UNIQUE NOT NULL
  141. )
  142. GO
  143.  
  144. UPDATE type_car SET type_car_name = UPPER(type_car_name)
  145. GO
  146.  
  147. INSERT INTO type_car(type_car_id, type_car_name) VALUES
  148. (1, 'Audi'),
  149. (2, 'Ford'),
  150. (3, 'Renault'),
  151. (4, 'Honda'),
  152. (5, 'Lada')
  153.  
  154. SELECT * FROM type_car
  155.  
  156.  
  157. IF OBJECT_ID('color', 'U') IS NOT NULL
  158.     DROP TABLE color
  159. GO
  160.  
  161.  
  162.  
  163. IF OBJECT_ID('color', 'U') IS NOT NULL
  164.   DROP TABLE color
  165. GO
  166.  
  167. CREATE TABLE color(
  168.     id_color INT PRIMARY KEY NOT NULL,
  169.     color_name VARCHAR(50) UNIQUE NOT NULL
  170. )
  171. GO
  172.  
  173. INSERT INTO color(id_color, color_name) VALUES
  174. (0, 'ЧЕРНЫЙ'),
  175. (1, 'беЛый'),
  176. (2, 'красныЙ'),
  177. (3, 'жЕлтый')
  178.  
  179. UPDATE color SET color_name = LOWER(color_name)
  180. GO
  181.  
  182. SELECT * FROM color
  183. GO
  184.  
  185. IF OBJECT_ID('cars', 'U') IS NOT NULL
  186.   DROP TABLE cars
  187. GO
  188.  
  189. CREATE TABLE cars (
  190.     id_car INT PRIMARY KEY NOT NULL,
  191.     type_car_id INT NOT NULL,
  192.     id_color INT NOT NULL,
  193.     car_number VARCHAR(6) NOT NULL,
  194.     car_number_region VARCHAR(3) NOT NULL
  195.  
  196.     FOREIGN KEY (car_number_region) REFERENCES regions(region_number),
  197.     FOREIGN KEY (type_car_id) REFERENCES type_car(type_car_id),
  198.     FOREIGN KEY (id_color) REFERENCES color(id_color)
  199. )
  200. GO
  201.  
  202. IF OBJECT_ID('trigCar', 'TR') IS NOT NULL
  203.     DROP TRIGGER trigCar
  204. GO
  205.  
  206. CREATE TRIGGER trigCar ON cars FOR INSERT
  207. AS
  208. BEGIN
  209.     IF (EXISTS (SELECT * FROM inserted WHERE ((car_number NOT LIKE ('[ABEKMHOPCTYXАВЕКМНОРСТУХ][0-9][0-9][0-9][ABEKMHOPCTYXАВЕКМНОРСТУХ][ABEKMHOPCTYXАВЕКМНОРСТУХ]')) OR
  210.                                               (car_number_region NOT LIKE ('[127][0-9][0-9]')) AND
  211.                                               (car_number_region NOT LIKE ('[0-9][0-9]'))))) OR
  212.         (NOT EXISTS (SELECT * FROM cars, inserted WHERE ((inserted.id_car = cars.id_car)
  213.                                                         AND (inserted.type_car_id = cars.type_car_id)
  214.                                                         AND (inserted.id_color = cars.id_color)
  215.                                                         AND (inserted.car_number = cars.car_number)
  216.                                                         AND (inserted.car_number_region = cars.car_number_region))))
  217.     BEGIN
  218.         print ('Неверно номер или регион в таблице автомобилей');
  219.         ROLLBACK TRANSACTION;
  220.         RETURN
  221.     END
  222.  
  223.     /*IF ((EXISTS ((SELECT COUNT(cars.id_car) FROM cars)) AND
  224.         ((SELECT COUNT(cars.id_car) FROM cars GROUP BY cars.car_number, cars.car_number_region) > (SELECT COUNT(cars.id_car) FROM cars ))))
  225.     BEGIN
  226.         print ('Встретился повторный номер');
  227.         ROLLBACK TRANSACTION;
  228.         RETURN
  229.     END*/
  230.  
  231. END
  232. GO
  233.  
  234.  
  235. /*IF OBJECT_ID('trigCarNumb', 'TR') IS NOT NULL
  236.     DROP TRIGGER trigCarNumb
  237. GO
  238. CREATE TRIGGER trigCarNumb ON cars FOR INSERT
  239. AS
  240.     IF ((EXISTS ((SELECT COUNT(cars.id_car) FROM cars)) AND
  241.         ((SELECT COUNT(cars.id_car) FROM cars GROUP BY cars.car_number, cars.car_number_region) > (SELECT COUNT(cars.id_car) FROM cars ))))
  242.     BEGIN
  243.         print ('Встретился повторный номер');
  244.         ROLLBACK TRANSACTION;
  245.         RETURN
  246.     END
  247. GO*/
  248.  
  249.  
  250. INSERT INTO cars(id_car, type_car_id, id_color, car_number, car_number_region) VALUES
  251. (2, 2, 0, 'A000AA', '96')
  252. GO
  253.  
  254. INSERT INTO cars(id_car, type_car_id, id_color, car_number, car_number_region) VALUES
  255. (1, 2, 1, 'H123Ko', '96')
  256. GO
  257.  
  258. INSERT INTO cars(id_car, type_car_id, id_color, car_number, car_number_region) VALUES
  259. (3, 5, 3, 'B159OP', '164')
  260. GO
  261.  
  262. INSERT INTO cars(id_car, type_car_id, id_color, car_number, car_number_region) VALUES
  263. (4, 5, 3, 'B159OP', '66')
  264. GO
  265.  
  266. INSERT INTO cars(id_car, type_car_id, id_color, car_number, car_number_region) VALUES
  267. (6, 2, 2, 'a456hk', '164')
  268. GO
  269.  
  270.  
  271. INSERT INTO cars(id_car, type_car_id, id_color, car_number, car_number_region) VALUES
  272. (7, 2, 2, '5456hu', '164')
  273. GO
  274.  
  275.  
  276.  
  277. SELECT * FROM cars
  278. GO
  279.  
  280.  
  281. IF OBJECT_ID('humans', 'U') IS NOT NULL
  282.   DROP TABLE humans
  283. GO
  284.  
  285. CREATE TABLE humans (
  286.     human_id INT PRIMARY KEY NOT NULL,
  287.     human_surname VARCHAR(30) NOT NULL,
  288.     human_name VARCHAR(20) NOT NULL
  289. )
  290. GO
  291. /*ALTER TABLE humans
  292. ADD CONSTRAINT chk_name CHECK*/
  293. /*check name for symbols*/
  294.  
  295. UPDATE humans SET human_surname = UPPER(human_surname),
  296.                   human_name = UPPER(human_name)
  297. GO
  298.  
  299. INSERT INTO humans(human_id, human_surname, human_name) VALUES
  300. (0, 'Абрамов', 'Александр'),
  301. (1, 'Середкина', 'Галина'),
  302. (2, 'Васильев', 'Сергей'),
  303. (3, 'Давлатова', 'Татьяна')
  304. GO
  305.  
  306. IF OBJECT_ID('penalties', 'U') IS NOT NULL
  307.   DROP TABLE penalties
  308. GO
  309.  
  310. CREATE TABLE penalties (
  311.     penalty_id INT PRIMARY KEY NOT NULL,
  312.     penalty_name VARCHAR(500) NOT NULL,
  313.     penalty_cost money NOT NULL
  314. )
  315. GO
  316.  
  317. INSERT INTO penalties(penalty_id, penalty_name, penalty_cost) VALUES
  318. (1211, 'Управление ТС, не зарегистрированным в установленном порядке', 800),
  319. (1232, 'Управление ТС водителем, не имеющим при себе документов на право
  320.         управления им, страхового полиса обязательного страхования
  321.         гражданской ответственности владельцев ТС', 500),
  322. (1233, 'Передача управления ТС лицу, не имеющему при себе документов на право управления им', 3000),
  323. (1271, 'Управление ТС водителем, не имеющим права управления ТС (за исключением учебной езды)', 5000),
  324. (1281, 'Управление ТС водителем, находящимся в состоянии опьянения', 30000),
  325. (1292, 'Превышение установленной скорости движения транспортного средства
  326.         на величину более 20, но не более 40 километров в чаc', 500)
  327.  
  328. SELECT *FROM penalties
  329.  
  330. IF OBJECT_ID('isPay', 'U') IS NOT NULL
  331.     DROP TABLE isPay
  332. GO
  333.  
  334. CREATE TABLE isPay (
  335.     is_pay bit PRIMARY KEY DEFAULT 0,
  336.     name_pay VARCHAR(3) UNIQUE NOT NULL
  337. )
  338.  
  339. INSERT INTO isPay(is_pay, name_pay) VALUES
  340. (0, 'Да'),
  341. (1, 'Нет')
  342. GO
  343.  
  344.  
  345. IF OBJECT_ID('human_penalties', 'U') IS NOT NULL
  346.   DROP TABLE human_penalties
  347. GO
  348.  
  349. CREATE TABLE human_penalties (
  350.     id_node INT PRIMARY KEY NOT NULL,
  351.     human_id INT NOT NULL,
  352.     penalty_id INT NOT NULL,
  353.     is_pay bit DEFAULT 0
  354.  
  355.     FOREIGN KEY (human_id) REFERENCES humans(human_id),
  356.     FOREIGN KEY (penalty_id) REFERENCES penalties(penalty_id)
  357. )
  358. GO
  359.  
  360. INSERT INTO human_penalties(id_node, human_id, penalty_id, is_pay) VALUES
  361. (0, 0, 1232, 1),
  362. (1, 0, 1292, 0),
  363. (2, 1, 1292, 1)
  364. GO
  365.  
  366. IF OBJECT_ID('GIBDD_posts', 'U') IS NOT NULL
  367.   DROP TABLE GIBDD_posts
  368. GO
  369.  
  370. CREATE TABLE GIBDD_posts (
  371.     post_id INT PRIMARY KEY NOT NULL,
  372.     post_address VARCHAR(50) NOT NULL
  373. )
  374. GO
  375.  
  376. INSERT INTO GIBDD_posts(post_id, post_address) VALUES
  377. (0, 'Южный пост'),
  378. (1, 'Северный пост'),
  379. (2, 'Западный пост'),
  380. (3, 'Восточный пост')
  381. GO
  382.  
  383.  
  384. IF OBJECT_ID('main', 'U') IS NOT NULL
  385.   DROP TABLE main
  386. GO
  387.  
  388. CREATE TABLE main (
  389.     human_id INT NOT NULL,
  390.     post_id INT NOT NULL,
  391.     car_id INT NOT NULL,
  392.     date_measure DATE NOT NULL,
  393.     napr bit NOT NULL
  394.    
  395.     FOREIGN KEY (human_id) REFERENCES humans(human_id),
  396.     FOREIGN KEY (post_id) REFERENCES GIBDD_posts(post_id),
  397.     FOREIGN KEY (car_id) REFERENCES cars(id_car)
  398. )
  399.  
  400. INSERT INTO main(human_id, post_id, car_id, date_measure, napr) VALUES
  401. (3, 3, 1, '08:00:00', 0),
  402. (2, 2, 2, '10:43:30', 1),
  403. (1, 1, 3, '02:28:30', 1),
  404. (0, 0, 4, '01:12:05', 0),
  405. (0, 0, 2, '18:25:15', 1),
  406. (3, 3, 3, '20:35:30', 1)
  407. GO
  408.  
  409. SELECT * FROM main
  410.  
  411.  
  412. /*Подсчитывать количество различных категорий автомобилей.*/
  413. SELECT type_car.type_car_name AS 'Марка машины',
  414.     COUNT(cars.id_car) AS 'Количество машин'
  415. FROM cars INNER JOIN
  416.     type_car ON type_car.type_car_id=cars.type_car_id
  417. GROUP BY type_car.type_car_name
  418.  
  419.  
  420. SELECT color.color_name AS 'Цвет машины',
  421.     COUNT(cars.id_car) AS 'Количество машин'
  422. FROM cars INNER JOIN
  423.     color ON color.id_color=cars.id_color
  424. GROUP BY color.color_name
  425.  
  426.  
  427. /*поправить, чтобы 66 и 96 считались за один регион*/
  428. SELECT regions.region_number AS 'Номер региона',
  429.     COUNT(cars.id_car) AS 'Количество машин'
  430. FROM cars
  431.     INNER JOIN regions ON regions.region_number = cars.car_number_region
  432. GROUP BY regions.region_number
  433.  
  434.  
  435. SELECT humans.human_surname AS 'Фамилия водителя',  
  436.        humans.human_name AS 'Имя водителя',
  437.        penalties.penalty_name AS 'Наименование штрафа',
  438.        penalties.penalty_cost AS 'Стоимость штрафа',
  439.        isPay.name_pay AS 'Оплачен?'
  440. FROM human_penalties
  441.     INNER JOIN humans ON humans.human_id=human_penalties.human_id
  442.     INNER JOIN penalties ON penalties.penalty_id=human_penalties.penalty_id
  443.     INNER JOIN isPay ON isPay.is_pay=human_penalties.is_pay
  444. GROUP BY humans.human_surname, humans.human_name, penalties.penalty_name, penalties.penalty_cost, isPay.name_pay
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement