Advertisement
Guest User

Untitled

a guest
Jan 10th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.20 KB | None | 0 0
  1. USE master USE master
  2. GO
  3.  
  4. IF DB_ID('LAB8') IS NOT NULL
  5. DROP DATABASE LAB8
  6. GO
  7.  
  8. CREATE DATABASE IU9_LAB8
  9. ON (NAME = Lab8, FILENAME = 'C:\DB\Lab8\LAB8.mdf',
  10. SIZE = 10, MAXSIZE = UNLIMITED, FILEGROWTH = 5%)
  11. LOG ON
  12. (NAME = Lab8_log, FILENAME = 'C:\DB\Lab8\LAB8.ldf',
  13. SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB );
  14. GO
  15.  
  16.  
  17.  
  18. USE IU9_LAB8
  19. GO
  20. CREATE TABLE Студент
  21. (
  22. [Номер_зачетки] varchar(6) NOT NULL PRIMARY KEY,
  23. Фамилия varchar(20) NOT NULL,
  24. Имя varchar(20) NOT NULL,
  25. Отчество varchar(20) NOT NULL,
  26. Пол char(7) NULL,
  27. Статус_в_группе varchar(20) NULL DEFAULT 'Студент',
  28. Адрес_проживания varchar(40) NULL DEFAULT 'Не указан',
  29. Номер_телефона char(11) NULL DEFAULT 'Не указан',
  30. Email varchar(30) NULL DEFAULT 'Не указан',
  31. Возраст int NOT NULL
  32. )
  33. GO
  34.  
  35.  
  36. INSERT INTO Студент (Номер_зачетки,Фамилия,Имя,Отчество,Пол,Возраст) VALUES ('14У468','Демидов','Андрей','Евгеньевич','мужской',20);
  37. INSERT INTO Студент (Номер_зачетки,Фамилия,Имя,Отчество,Пол,Email,Возраст) VALUES ('14У533','Кудрявцев','Иван','Анатольевич','мужской','desprta667@yandex.ru',19);
  38. INSERT INTO Студент (Номер_зачетки,Фамилия,Имя,Отчество,Пол,Статус_в_группе,Номер_телефона,Email,Возраст)VALUES ('15У345','Иванова','Анна','Семеновна','женский','Староста','89853656292','anna_iv@yandex.ru',21);
  39. INSERT INTO Студент (Номер_зачетки,Фамилия,Имя,Отчество,Пол,Адрес_проживания,Номер_телефона,Email,Возраст)VALUES ('15А854','Петров','Игорь','Иванович','мужской','улица Байкальская,дом 29,кв.30','89852461315','irjuk@mail.ru',20);
  40. INSERT INTO Студент (Номер_зачетки,Фамилия,Имя,Отчество,Пол,Статус_в_группе,Адрес_проживания,Номер_телефона,Email,Возраст) VALUES ('15Ю543','Кузнецова','Алеся','Евгеньевна','женский','Зам.старосты','Улица Ленина,дом 15,кв.66','89854795456','ales_kuz@yandex.ru',21);
  41.  
  42. SELECT * FROM Студент
  43.  
  44. USE IU9_LAB8
  45. GO
  46. CREATE TABLE Дисциплина
  47. (
  48. Название_дисциплины varchar(40) NOT NULL PRIMARY KEY,
  49. Семестр int NOT NULL,
  50. Количество_модулей int NULL DEFAULT 3
  51. )
  52. GO
  53.  
  54. INSERT INTO Дисциплина (Название_дисциплины,Семестр) VALUES ('Математический анализ',1)
  55. INSERT INTO Дисциплина (Название_дисциплины,Семестр) VALUES ('Дискретная математика',2)
  56. INSERT INTO Дисциплина (Название_дисциплины,Семестр) VALUES ('Алгебра',3)
  57. INSERT INTO Дисциплина (Название_дисциплины,Семестр) VALUES ('Компьютерная графика',4)
  58. INSERT INTO Дисциплина (Название_дисциплины,Семестр,Количество_модулей) VALUES ('Базы данных',5,2)
  59. INSERT INTO Дисциплина (Название_дисциплины,Семестр,Количество_модулей) VALUES ('Архитектура ЭВМ',2,2)
  60.  
  61. SELECT * FROM Дисциплина
  62.  
  63. USE IU9_LAB8
  64. GO
  65. CREATE TABLE Экзамен
  66. (
  67. Дата date NOT NULL,
  68. Номер_зачетки_студента varchar(6) NOT NULL REFERENCES Студент(Номер_зачетки) ON DELETE CASCADE,
  69. Название_дисциплины varchar(40) NOT NULL REFERENCES Дисциплина(Название_дисциплины) ON DELETE CASCADE,
  70. Оценка int NOT NULL,
  71. CONSTRAINT FK_EX PRIMARY KEY (Дата,Номер_зачетки_студента,Название_дисциплины)
  72. )
  73. GO
  74.  
  75. SELECT * FROM Дисциплина
  76. SELECT * FROM Студент
  77. SELECT * FROM Экзамен
  78.  
  79. -- smalldatetime = '1955-12-13 12:43:10'
  80.  
  81. INSERT INTO Экзамен (Дата,Номер_зачетки_студента,Название_дисциплины,Оценка) VALUES ('20150114','14У468','Математический анализ',5);
  82. INSERT INTO Экзамен (Дата,Номер_зачетки_студента,Название_дисциплины,Оценка) VALUES ('20150114','14У533','Математический анализ',4);
  83. INSERT INTO Экзамен (Дата,Номер_зачетки_студента,Название_дисциплины,Оценка) VALUES ('20150118','15А854','Математический анализ',3);
  84. INSERT INTO Экзамен (Дата,Номер_зачетки_студента,Название_дисциплины,Оценка) VALUES ('20150620','14У468','Дискретная математика',4);
  85. INSERT INTO Экзамен (Дата,Номер_зачетки_студента,Название_дисциплины,Оценка) VALUES ('20150620','14У533','Дискретная математика',3);
  86. INSERT INTO Экзамен (Дата,Номер_зачетки_студента,Название_дисциплины,Оценка) VALUES ('20150913','15Ю543','Дискретная математика',5);
  87. INSERT INTO Экзамен (Дата,Номер_зачетки_студента,Название_дисциплины,Оценка) VALUES ('20160115','14У468','Алгебра',5);
  88. INSERT INTO Экзамен (Дата,Номер_зачетки_студента,Название_дисциплины,Оценка) VALUES ('20160115','15У345','Алгебра',5);
  89. INSERT INTO Экзамен (Дата,Номер_зачетки_студента,Название_дисциплины,Оценка) VALUES ('20160115','15Ю543','Алгебра',5);
  90.  
  91.  
  92. SELECT * FROM Экзамен
  93.  
  94. USE IU9_LAB8;
  95. GO
  96. CREATE TABLE Преподаватель
  97. (
  98. Фамилия varchar(20) NOT NULL,
  99. Имя varchar(20) NOT NULL,
  100. Отчество varchar(20) NOT NULL,
  101. Стаж int NULL,
  102. Адрес varchar(40) NULL DEFAULT 'Не указан',
  103. Email varchar(30) NULL DEFAULT 'Не указан',
  104. CONSTRAINT PK_PREP PRIMARY KEY(Фамилия,Имя,Отчество)
  105. )
  106. GO
  107.  
  108. INSERT INTO Преподаватель(Фамилия,Имя,Отчество,Стаж) VALUES ('Подобряев','Александр','Иванович',15)
  109. INSERT INTO Преподаватель(Фамилия,Имя,Отчество,Стаж,Email) VALUES ('Куликова','Ольга','Викторовна',7,'kulikova_olg@mail.ru')
  110. INSERT INTO Преподаватель(Фамилия,Имя,Отчество,Стаж) VALUES ('Скороходов','Иван','Матвеевич',20)
  111.  
  112. USE IU9_LAB8
  113. GO
  114. CREATE TABLE Ведение_предмета
  115. (
  116. Статус varchar(30) NOT NULL,
  117. Фамилия varchar(20) NOT NULL,
  118. Имя varchar(20) NOT NULL,
  119. Отчество varchar(20) NOT NULL,
  120. Название_дисциплины varchar(40) NOT NULL REFERENCES Дисциплина(Название_дисциплины),
  121. Количество_групп int NULL DEFAULT 1,
  122. CONSTRAINT PK_SUBJ PRIMARY KEY (Статус,Фамилия,Имя,Отчество),
  123. CONSTRAINT FK_SUBJ FOREIGN KEY (Фамилия,Имя,Отчество) REFERENCES Преподаватель(Фамилия,Имя,Отчество)
  124. )
  125. GO
  126.  
  127. INSERT INTO Ведение_предмета (Статус,Фамилия,Имя,Отчество,Название_дисциплины,Количество_групп)
  128. VALUES ('Семинарист','Подобряев','Александр','Иванович','Математический анализ',2);
  129. INSERT INTO Ведение_предмета (Статус,Фамилия,Имя,Отчество,Название_дисциплины,Количество_групп)
  130. VALUES ('Семинарист','Куликова','Ольга','Викторовна','Дискретная математика',3);
  131. INSERT INTO Ведение_предмета (Статус,Фамилия,Имя,Отчество,Название_дисциплины)
  132. VALUES ('Лектор','Скороходов','Иван','Матвеевич','Алгебра');
  133.  
  134. SELECT * FROM Ведение_предмета
  135.  
  136. USE IU9_LAB8;
  137. GO
  138. CREATE TABLE Преподавательский_состав
  139. (
  140. Дата date NOT NULL,
  141. Номер_зачетки varchar(6) NOT NULL,
  142. Название_дисциплины varchar(40) NOT NULL,
  143. Фамилия varchar(20) NOT NULL,
  144. Имя varchar(20) NOT NULL,
  145. Отчество varchar(20) NOT NULL,
  146. CONSTRAINT FK_PR FOREIGN KEY (Фамилия,Имя,Отчество) REFERENCES Преподаватель(Фамилия,Имя,Отчество),
  147. CONSTRAINT FK_PR_2 FOREIGN KEY (Дата,Номер_зачетки,Название_дисциплины) REFERENCES Экзамен(Дата,Номер_зачетки_студента,Название_дисциплины)
  148. )
  149. GO
  150.  
  151. INSERT INTO Преподавательский_состав (Дата,Номер_зачетки,Название_дисциплины,Фамилия,Имя,Отчество)
  152. VALUES ('20150114','14У468','Математический анализ','Подобряев','Александр','Иванович');
  153. INSERT INTO Преподавательский_состав (Дата,Номер_зачетки,Название_дисциплины,Фамилия,Имя,Отчество)
  154. VALUES ('20160115','15У345','Алгебра','Скороходов','Иван','Матвеевич');
  155.  
  156. SELECT * FROM Преподавательский_состав
  157.  
  158. --------------------------------------------------------------------------------------------------------------------
  159. -- Создание хранимой процедуры
  160.  
  161. USE IU9_LAB8
  162. GO
  163. CREATE PROCEDURE dbo.createCursor
  164. @the_cursor CURSOR VARYING OUTPUT
  165. AS
  166. SET @the_cursor = CURSOR
  167. FORWARD_ONLY STATIC FOR
  168. SELECT Номер_зачетки,Имя,Фамилия,Отчество FROM Студент
  169. OPEN @the_cursor
  170. GO
  171.  
  172. USE IU9_LAB8;
  173. GO
  174. DECLARE @MyCursor CURSOR
  175. EXEC dbo.createCursor @the_cursor = @MyCursor OUTPUT
  176. FETCH NEXT FROM @MyCursor;
  177. WHILE @@FETCH_STATUS = 0
  178. BEGIN
  179. FETCH NEXT FROM @MyCursor
  180. --PRINT 'yes';
  181. END
  182. CLOSE @MyCursor
  183. DEALLOCATE @MyCursor
  184. GO
  185.  
  186. USE IU9_LAB8
  187. GO
  188. DROP PROCEDURE dbo.createCursor
  189. GO
  190.  
  191.  
  192. ---------------------------------------------------------------------------------------------------------------------
  193. -- Модификация хранимой процедуры
  194.  
  195.  
  196. USE IU9_LAB8
  197. GO
  198. CREATE FUNCTION dbo.CreateInitials (@fnameInit CHAR,@snameInit CHAR,@tnameInit CHAR)
  199. RETURNS VARCHAR(6) AS
  200. BEGIN
  201. DECLARE @Initials VARCHAR(6)
  202. SET @Initials = CONCAT(@fnameInit,'.',@snameInit,'.',@tnameInit,'.')
  203. RETURN @Initials
  204. END
  205. GO
  206. /*Аналогично заполняется только первой буквой*/
  207.  
  208.  
  209. USE IU9_LAB8
  210. GO
  211. ALTER PROCEDURE dbo.CreateCursor
  212. @the_cursor CURSOR VARYING OUTPUT
  213. AS
  214. SET @the_cursor = CURSOR FOR
  215. SELECT Номер_зачетки,Фамилия,Имя,Отчество,Возраст,Инициалы = dbo.CreateInitials(Имя,Фамилия,Отчество) FROM Студент
  216. OPEN @the_cursor
  217. GO
  218.  
  219. DECLARE @cursor CURSOR;
  220. EXEC dbo.CreateCursor @the_cursor = @cursor OUTPUT;
  221. FETCH NEXT FROM @cursor;
  222. WHILE @@FETCH_STATUS = 0
  223. BEGIN
  224. FETCH NEXT FROM @cursor;
  225. END
  226. CLOSE @cursor;
  227. DEALLOCATE @cursor;
  228. GO
  229.  
  230. USE IU9_LAB8
  231. GO
  232. DROP FUNCTION dbo.Course
  233. GO
  234.  
  235. USE IU9_LAB8
  236. GO
  237. DROP FUNCTION dbo.CreateInitials
  238. GO
  239.  
  240. USE IU9_LAB8
  241. GO
  242. DROP FUNCTION dbo.TransferInDays
  243. GO
  244.  
  245. -------------------------------------------------------------------------------------------------------------------
  246. /*Вторая процедура*/
  247.  
  248. USE IU9_LAB8
  249. GO
  250. CREATE FUNCTION dbo.adult_or_not (@age INT)
  251. RETURNS INT
  252. AS
  253. BEGIN
  254. DECLARE @result INT
  255. IF (@age < 18)
  256. SET @result = 0
  257. ELSE
  258. SET @result = 1
  259. RETURN @result
  260. END
  261. GO
  262.  
  263. USE IU9_LAB8
  264. GO
  265. CREATE PROCEDURE dbo.print_proc AS
  266. DECLARE @cursor CURSOR
  267. DECLARE @ID VARCHAR(6)
  268. DECLARE @fname VARCHAR(30)
  269. DECLARE @sname VARCHAR(30)
  270. DECLARE @tname VARCHAR(30)
  271. DECLARE @age INT
  272. DECLARE @initials VARCHAR(6)
  273.  
  274. EXEC dbo.CreateCursor @the_cursor = @cursor OUTPUT
  275. FETCH NEXT FROM @cursor INTO @ID, @sname, @fname, @tname,@age, @initials
  276. PRINT 'Номер_зачетки,ФИО и возраст: "' + @ID + ' ' + @sname + ' ' + @fname + ' ' + @tname + ' ' + CAST(@age as varchar(2)) + '"'
  277. WHILE @@FETCH_STATUS = 0
  278. BEGIN
  279. IF (dbo.adult_or_not(@age) = 1)
  280. PRINT 'Студент ' + @sname + ' ' + @fname + ' ' + @tname + ' с номером зачетной книжки ' + @ID + ' является совершеннолетним.'
  281. ELSE
  282. PRINT 'Студент ' + @sname + ' ' + @fname + ' ' + @tname + ' с номером зачетной книжки ' + @ID + ' не является совершеннолетним.'
  283. FETCH NEXT FROM @cursor INTO @ID,@sname,@fname,@tname,@age,@initials
  284. END
  285. CLOSE @cursor
  286. DEALLOCATE @cursor
  287. GO
  288.  
  289. EXEC dbo.print_proc
  290. GO
  291.  
  292. USE IU9_LAB8
  293. GO
  294. DROP PROCEDURE dbo.print_proc
  295. GO
  296.  
  297. -------------------------------------------------------------------------------------------------------------------------------------
  298. /*Модификация второй процедуры*/
  299.  
  300. USE IU9_LAB8
  301. GO
  302. CREATE FUNCTION dbo.student_table ()
  303. RETURNS TABLE
  304. AS
  305. RETURN (SELECT Номер_зачетки,Фамилия,Имя,Отчество,Возраст FROM Студент)
  306. GO
  307.  
  308. USE IU9_LAB8
  309. GO
  310. ALTER PROCEDURE dbo.print_proc
  311. AS
  312. DECLARE @the_cursor CURSOR
  313. DECLARE @ID VARCHAR(6)
  314. DECLARE @fname VARCHAR(20)
  315. DECLARE @sname VARCHAR(20)
  316. DECLARE @tname VARCHAR(20)
  317. DECLARE @age INT
  318. DECLARE @initials VARCHAR(6)
  319. SET @the_cursor = CURSOR FOR SELECT Номер_зачетки,Фамилия,Имя,Отчество,Возраст,Инициалы = dbo.CreateInitials(Фамилия,Имя,Отчество) from dbo.student_table()
  320. OPEN @the_cursor
  321. FETCH NEXT FROM @the_cursor INTO @ID, @sname, @fname, @tname,@age, @initials
  322. PRINT 'Номер_зачетки,ФИО и возраст: "' + @ID + ' ' + @sname + ' ' + @fname + ' ' + @tname + ' ' + CAST(@age as varchar(2)) + '"'
  323. WHILE @@FETCH_STATUS = 0
  324. BEGIN
  325. IF (dbo.adult_or_not(@age) = 1)
  326. PRINT 'Студент ' + @sname + ' ' + @fname + ' ' + @tname + ' с номером зачетной книжки ' + @ID + ' является совершеннолетним.'
  327. ELSE
  328. PRINT 'Студент ' + @sname + ' ' + @fname + ' ' + @tname + ' с номером зачетной книжки ' + @ID + ' не является совершеннолетним.'
  329. FETCH NEXT FROM @the_cursor INTO @ID,@sname,@fname,@tname,@age,@initials
  330. END
  331. CLOSE @the_cursor
  332. DEALLOCATE @the_cursor
  333. GO
  334.  
  335. EXEC dbo.print_proc
  336. GO
  337.  
  338.  
  339. USE IU9_LAB8
  340. GO
  341. DROP PROCEDURE dbo.print_proc
  342. GO
  343.  
  344. USE IU9_LAB8
  345. GO
  346. DROP FUNCTION dbo.student_table
  347. GO
  348. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement