Advertisement
SquirrelInBox

tableTriggers

Nov 8th, 2015
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 11.64 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. (1, 2, 1, 'H123Ko', '96'),
  253. (3, 5, 3, 'B159OP', '164'),
  254. (4, 5, 3, 'B159OP', '66')
  255. GO
  256.  
  257. /*INSERT INTO cars(id_car, type_car_id, id_color, car_number, car_number_region) VALUES
  258. (7, 5, 3, 'B159OP', '164')*//*
  259. (5, 1, 1, 'a125qw', '96'),
  260. (6, 2, 2, 'a456hk', '164')
  261. GO*/
  262.  
  263. SELECT * FROM cars
  264. GO
  265.  
  266.  
  267. IF OBJECT_ID('humans', 'U') IS NOT NULL
  268.   DROP TABLE humans
  269. GO
  270.  
  271. CREATE TABLE humans (
  272.     human_id INT PRIMARY KEY NOT NULL,
  273.     human_surname VARCHAR(30) NOT NULL,
  274.     human_name VARCHAR(20) NOT NULL
  275. )
  276. GO
  277. /*ALTER TABLE humans
  278. ADD CONSTRAINT chk_name CHECK*/
  279. /*check name for symbols*/
  280.  
  281. UPDATE humans SET human_surname = UPPER(human_surname),
  282.                   human_name = UPPER(human_name)
  283. GO
  284.  
  285. INSERT INTO humans(human_id, human_surname, human_name) VALUES
  286. (0, 'Абрамов', 'Александр'),
  287. (1, 'Середкина', 'Галина'),
  288. (2, 'Васильев', 'Сергей'),
  289. (3, 'Давлатова', 'Татьяна')
  290. GO
  291.  
  292. IF OBJECT_ID('penalties', 'U') IS NOT NULL
  293.   DROP TABLE penalties
  294. GO
  295.  
  296. CREATE TABLE penalties (
  297.     penalty_id INT PRIMARY KEY NOT NULL,
  298.     penalty_name VARCHAR(500) NOT NULL,
  299.     penalty_cost money NOT NULL
  300. )
  301. GO
  302.  
  303. INSERT INTO penalties(penalty_id, penalty_name, penalty_cost) VALUES
  304. (1211, 'Управление ТС, не зарегистрированным в установленном порядке', 800),
  305. (1232, 'Управление ТС водителем, не имеющим при себе документов на право
  306.         управления им, страхового полиса обязательного страхования
  307.         гражданской ответственности владельцев ТС', 500),
  308. (1233, 'Передача управления ТС лицу, не имеющему при себе документов на право управления им', 3000),
  309. (1271, 'Управление ТС водителем, не имеющим права управления ТС (за исключением учебной езды)', 5000),
  310. (1281, 'Управление ТС водителем, находящимся в состоянии опьянения', 30000),
  311. (1292, 'Превышение установленной скорости движения транспортного средства
  312.         на величину более 20, но не более 40 километров в чаc', 500)
  313.  
  314. SELECT *FROM penalties
  315.  
  316. IF OBJECT_ID('isPay', 'U') IS NOT NULL
  317.     DROP TABLE isPay
  318. GO
  319.  
  320. CREATE TABLE isPay (
  321.     is_pay bit PRIMARY KEY DEFAULT 0,
  322.     name_pay VARCHAR(3) UNIQUE NOT NULL
  323. )
  324.  
  325. INSERT INTO isPay(is_pay, name_pay) VALUES
  326. (0, 'Да'),
  327. (1, 'Нет')
  328. GO
  329.  
  330.  
  331. IF OBJECT_ID('human_penalties', 'U') IS NOT NULL
  332.   DROP TABLE human_penalties
  333. GO
  334.  
  335. CREATE TABLE human_penalties (
  336.     id_node INT PRIMARY KEY NOT NULL,
  337.     human_id INT NOT NULL,
  338.     penalty_id INT NOT NULL,
  339.     is_pay bit DEFAULT 0
  340.  
  341.     FOREIGN KEY (human_id) REFERENCES humans(human_id),
  342.     FOREIGN KEY (penalty_id) REFERENCES penalties(penalty_id)
  343. )
  344. GO
  345.  
  346. INSERT INTO human_penalties(id_node, human_id, penalty_id, is_pay) VALUES
  347. (0, 0, 1232, 1),
  348. (1, 0, 1292, 0),
  349. (2, 1, 1292, 1)
  350. GO
  351.  
  352. IF OBJECT_ID('GIBDD_posts', 'U') IS NOT NULL
  353.   DROP TABLE GIBDD_posts
  354. GO
  355.  
  356. CREATE TABLE GIBDD_posts (
  357.     post_id INT PRIMARY KEY NOT NULL,
  358.     post_address VARCHAR(50) NOT NULL
  359. )
  360. GO
  361.  
  362. INSERT INTO GIBDD_posts(post_id, post_address) VALUES
  363. (0, 'Южный пост'),
  364. (1, 'Северный пост'),
  365. (2, 'Западный пост'),
  366. (3, 'Восточный пост')
  367. GO
  368.  
  369.  
  370. IF OBJECT_ID('main', 'U') IS NOT NULL
  371.   DROP TABLE main
  372. GO
  373.  
  374. CREATE TABLE main (
  375.     human_id INT NOT NULL,
  376.     post_id INT NOT NULL,
  377.     car_id INT NOT NULL,
  378.     date_measure DATE NOT NULL,
  379.     napr bit NOT NULL
  380.    
  381.     FOREIGN KEY (human_id) REFERENCES humans(human_id),
  382.     FOREIGN KEY (post_id) REFERENCES GIBDD_posts(post_id),
  383.     FOREIGN KEY (car_id) REFERENCES cars(id_car)
  384. )
  385.  
  386. INSERT INTO main(human_id, post_id, car_id, date_measure, napr) VALUES
  387. (3, 3, 1, '151108', 0),
  388. (2, 2, 2, '151107', 1),
  389. (1, 1, 3, '151108', 1),
  390. (0, 0, 4, '151106', 0),
  391. (0, 0, 2, '151109', 1),
  392. (3, 3, 3, '151110', 1)
  393. GO
  394.  
  395. SELECT * FROM main
  396.  
  397.  
  398. /*Подсчитывать количество различных категорий автомобилей.*/
  399. SELECT type_car.type_car_name AS 'Марка машины',
  400.     COUNT(cars.id_car) AS 'Количество машин'
  401. FROM cars INNER JOIN
  402.     type_car ON type_car.type_car_id=cars.type_car_id
  403. GROUP BY type_car.type_car_name
  404.  
  405.  
  406. SELECT color.color_name AS 'Цвет машины',
  407.     COUNT(cars.id_car) AS 'Количество машин'
  408. FROM cars INNER JOIN
  409.     color ON color.id_color=cars.id_color
  410. GROUP BY color.color_name
  411.  
  412.  
  413. /*поправить, чтобы 66 и 96 считались за один регион*/
  414. SELECT regions.region_number AS 'Номер региона',
  415.     COUNT(cars.id_car) AS 'Количество машин'
  416. FROM cars
  417.     INNER JOIN regions ON regions.region_number = cars.car_number_region
  418. GROUP BY regions.region_number
  419.  
  420.  
  421. SELECT humans.human_surname AS 'Фамилия водителя',  
  422.        humans.human_name AS 'Имя водителя',
  423.        penalties.penalty_name AS 'Наименование штрафа',
  424.        penalties.penalty_cost AS 'Стоимость штрафа',
  425.        isPay.name_pay AS 'Оплачен?'
  426. FROM human_penalties
  427.     INNER JOIN humans ON humans.human_id=human_penalties.human_id
  428.     INNER JOIN penalties ON penalties.penalty_id=human_penalties.penalty_id
  429.     INNER JOIN isPay ON isPay.is_pay=human_penalties.is_pay
  430. 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