Главная страница

Лабораторный практикум. Лабораторная работа Обследование предметной области Построение модели ide создание контекстной диаграммы Создание диаграммы декомпозиции Создание диаграммы


Скачать 5.73 Mb.
НазваниеЛабораторная работа Обследование предметной области Построение модели ide создание контекстной диаграммы Создание диаграммы декомпозиции Создание диаграммы
АнкорЛабораторный практикум
Дата25.12.2022
Размер5.73 Mb.
Формат файлаpdf
Имя файлаЛабораторный практикум.pdf
ТипПрактикум
#863633
страница7 из 12
1   2   3   4   5   6   7   8   9   ...   12
5.2 Получение данных из определенных столбцов таблицы «Titles»
1. На панели в окне введите следующий код Transact-
SQL:
USE Pubs
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
Здесь оператор извлечет лишь те строки, значение поля которых превышает $10.
2. Исполните оператор Transact-SQL.
Результирующий набор выводится на вкладке панели
(рисунок 3).
Рисунок 3 – Получение данных из определенных свойств таблицы «Titles», удовлетворяющих заданному условию

91
5.4 Задание порядка, в котором выводится результирующий набор
1. На панели в окне введите следующий код Transact-
SQL:
USE Pubs
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
WHERE Price > 10
ORDER BY Price DESC, Title
Результирующий набор, который вернет этот оператор , группируются строки с одними и теми же значениями поля <Туре>. Строки, не соответствующие условиям конструкции , исключаются до начала любых операций по группировке. При группировке выполняется усреднение значений столбца
, а полученное среднее значение вставляется в результирующий набор в виде столбца . Значения столбца
упорядочиваются по убыванию.
2. Исполните оператор Transact-SQL.
Результирующий набор выводится на вкладке панели
(рисунок 5).
Рисунок 5 – Использование группировки данных и агрегатных функций

93
5.6 Создание таблицы для размещения результирующего набора
1. На панели в окне введите следующий код Transact-
SQL:
USE Pubs
SELECT Type, AVG(Price) AS AvgPrice
INTO TypeAvgPrice
FROM Titles
WHERE Price > 10
GROUP BY Type
ORDER BY AvgPrice DESC
Оператор , который позволит просмотреть все данные из таблицы «Test1».
4. Исполните оператор для просмотра данных таблицы
«Test1». Обратите внимание, что значения поля сгенерированы автоматически, а в поле каждой строки содержится пустое значение.

98
5.10 Модификация данных с помощью оператора
1. Просмотрите данные таблицы «Test1».
Если на панели остались результаты предыдущего запроса, то можно воспользоваться ими. В противном случае используйте для просмотра содержимого таблицы оператор для просмотра данных таблицы
«Test1». Обратите внимание на удвоенное значение поля для каждой книги типа «business».
5.11 Удаление данных из таблицы с помощью оператора
1. Введите на панели в окне следующий код на SQL>:
DELETE Test1
WHERE Title = 'Test Title'
Этот оператор удаляет все строки из таблицы, в столбце которой указано значение «Test Title». <br>2. Исполните оператор Transact-SQL. <br>На вкладке <Messages> панели <Results> выводится сообщение, где указано число строк, на которые повлияло исполнение оператора (рисунок 13). <br>Рисунок 13 – Удаление данных из таблицы «Test1» <br>3. Воспользуйтесь оператором <SELECT> для просмотра данных таблицы <br>«Test1». Обратите внимание, что строка <Test Title> удалена из таблицы. <br>4. Введите на панели <Editor> в окне <Query> следующий код на Transact-<br>SQL: <br>DELETE Test1 <br></div> <div> <br>100 <br>Этот оператор удаляет все строки таблицы «Test1». <br>5. Исполните оператор Transact-SQL. <br>На вкладке <Messages> панели <Results> выводится сообщение, где указано число строк, на которые повлияло исполнение оператора (рисунок 14). <br>Рисунок 14 – Удаление всех строк таблицы «Test1» <br>6. Воспользуйтесь оператором <SELECT> для просмотра данных таблицы <br>«Test1». Обратите внимание на отсутствие данных в таблице «Test1». <br><b>5.12 Удаление таблицы с помощью оператора <DROP TABLE> </b><br>1. Введите на панели <Editor> в окне <Query> следующий код на Transact-<br>SQL: <br>DROP TABLE Test1 <br>Этот оператора удаляет таблицу «Test1» из базы данных <br>2. Исполните оператор Transact-SQL. <br>На вкладке <Messages> панели <Results> выводится сообщение об успешном завершении команды (рисунок 15). <br></div> <div> <br>101 <br>Рисунок 15 – Удаление таблицы «Test1» <br>3. С помощью окна <Object Browser> удостоверьтесь, что таблица «Test1» удалена из базы данных. <br>4. Закройте <SQL Query Analyzer>. <br><b>5.13 Контрольное задание </b><br>1. Средствами SQL Server 2000 создать четыре таблицы в базе данных <br>. При создании таблиц выполнить следующие условия: <br>− поля номер_поставщика, номер_детали, номер_изделия во всех таблицах имеет символьный тип (char) и длину 6; <br>− поля рейтинг, вес и количество имеют целочисленный тип (int); <br>− поля фамилия, город (поставщика, детали или изделия), название <br>(детали или изделия) имеют символьный тип nchar и длину 20; <br>− для всех полей допускаются значения NULL и значения-дубликаты, кроме поля номер_поставщика из таблицы «S», номер детали из таблицы «P», номер изделия из таблицы «J». <br>Таблица 1 – Таблица поставщиков «S» <br>Номер поставщика <br>Фамилия <br>Рейтинг <br>Город <br>S1 <br>Смит <br>20 <br>Лондон <br>S2 <br>Джонс <br>10 <br>Париж <br>S3 <br>Блейк <br>30 <br>Париж <br>S4 <br>Кларк <br>20 <br>Лондон <br>S5 <br>Адамс <br>30 <br>Афины <br></div> <div> <br>102 <br>Таблица 2 – Таблица деталей «P» <br>Номер детали <br>Название <br>Цвет <br>Вес <br>Город <br>P1 <br>Гайка <br>Красный <br>12 <br>Лондон <br>P2 <br>Болт <br>Зеленый <br>17 <br>Париж <br>P3 <br>Винт <br>Голубой <br>17 <br>Рим <br>P4 <br>Винт <br>Красный <br>14 <br>Лондон <br>P5 <br>Кулачок <br>Голубой <br>12 <br>Париж <br>P6 <br>Блюм <br>Красный <br>19 <br>Лондон <br>Таблица 3 – Таблица изделий «J» <br>Номер изделия <br>Название <br>Город <br>J1 <br>Жесткий диск <br>Париж <br>J2 <br>Перфоратор <br>Рим <br>J3 <br>Считыватель <br>Афины <br>J4 <br>Принтер <br>Афины <br>J5 <br>Флоппи-диск <br>Лондон <br>J6 <br>Терминал <br>Осло <br>J7 <br>Лента <br>Лондон <br>Таблица 4 – Таблица поставок «SPJ» <br>Номер поставщика <br>Номер детали <br>Номер изделия <br>Количество <br>S1 <br>P1 <br>J1 200 <br>S1 <br>P1 <br>J4 700 <br>S2 <br>P3 <br>J1 400 <br>S2 <br>P3 <br>J2 200 <br>S2 <br>P3 <br>J3 200 <br>S2 <br>P3 <br>J4 500 <br>S2 <br>P3 <br>J5 600 <br>S2 <br>P3 <br>J6 400 <br>S2 <br>P3 <br>J7 800 <br>S2 <br>P5 <br>J2 100 <br>S3 <br>P3 <br>J1 200 <br>S3 <br>P4 <br>J2 500 <br>S4 <br>P6 <br>J3 300 <br>S4 <br>P6 <br>J7 300 <br>S5 <br>P2 <br>J2 200 <br>S5 <br>P2 <br>J4 100 <br>S5 <br>P5 <br>J5 500 <br>S5 <br>P5 <br>J7 100 <br>S5 <br>P6 <br>J2 200 <br>S5 <br>P1 <br>J4 100 <br>S5 <br>P3 <br>J4 200 <br>S5 <br>P4 <br>J4 800 <br>S5 <br>P5 <br>J4 400 <br>S5 <br>P6 <br>J4 500 <br></div> <div> <br>103 2. Убедиться в успешности выполненных действий. При необходимости исправить ошибки. <br>3. Используя Query Analizer, выполнить модификацию структуры таблиц <br>«S» и «SPJ», добавив в «SPJ» поле с датой поставки. Убедиться в успешности выполненных действий. При необходимости исправить ошибки. <br>4. Проверить результат заполнения таблиц, написав и выполнив простейший запрос select * from имя_таблицы <br>5. Связать все эти таблицы и обеспечить целостность данных. <br>6. Согласно выданному преподавателем варианту выполнить задания, описанные ниже. <br><b>5.14 Варианты заданий на составление запросов по выборке </b><br><b>информации из таблиц базы данных </b><br>Вариант 1 1. Выдать общее количество деталей «P1», поставляемых поставщиком <br>«S1». <br>2. Получить все пары названий городов, таких, что какой-либо поставщик из первого города поставляет детали для некоторого изделия, изготовляемого во втором городе. <br>3. Выдать номера изделий, использующих только детали, поставляемые поставщиком «S1». <br>4. Получить номера деталей, поставляемых каким-либо поставщиком из <br>Лондона, для изделия, изготавливаемого также в Лондоне. <br>Вариант 2 1. Выдать номера и фамилии поставщиков, поставляющих по крайней мере одну деталь, поставляемую по крайней мере одним поставщиком, который поставляет по крайней мере одну красную деталь. <br></div> <div> <br>104 2. Получить полный список деталей для всех изделий, изготавливаемых в <br>Лондоне. <br>3. <a href="/poperechnie-dvijeniya-rejushej-kromki-umeneshayut/index.html" title="Поперечные движения режущей кромки уменьшают">Выдать номера деталей</a>, поставляемых каким-либо поставщиком из <br>Лондона. <br>4. Получить номера деталей, поставляемых для всех изделий из Лондона. <br>Вариант 3 1. Выдать номера изделий, для которых детали поставляются по крайней мере одним поставщиком не из того же самого города. <br>2. Получить список всех поставок, в которых количество деталей находится в диапазоне от 300 до 750 включительно. <br>3. Выдать номера изделий, использующих по крайней мере одну деталь, поставляемую поставщиком «S1». <br>4. Получить номера и названия деталей, поставляемых для какого-либо изделия в Лондоне. <br>Вариант 4 1. Выдать номера и названия изделий, для которых город является первым в алфавитном списке таких городов. <br>2. Получить цвета деталей, поставляемых поставщиком «S1». <br>3. Выдать номера и фамилии поставщиков, поставляющих деталь «Р1» для какого-либо изделия в количестве, большем среднего объема поставок детали <br>«Р1» для этого изделия. <br>4. Получить полный список деталей для всех изделий. <br>Вариант 5 1. Выдать названия изделий, для которых поставляются детали поставщиком «S1». <br>2. Получить номера деталей, поставляемых для какоголибо изделия поставщиком, находящимся в том же городе, где изготавливается это изделие. <br></div> <div> <br>105 3. Выдать номера и названия изделий, для которых поставщик «S1» поставляет несколько деталей каждого из поставляемых им типов. <br>4. Получить номера изделий, для которых средний объем поставки деталей <br>«P1» больше наибольшего объема поставки любой детали для изделия «J1». <br><b>5.15 Варианты заданий на составление запросов по модификации </b><br><b>информации из таблиц базы данных </b><br>Вариант 1 1. Увеличить на 10 рейтинг всех поставщиков, рейтинг которых в настоящее время меньше, чем рейтинг поставщика «S4». <br>2. Постройте таблицу, содержащую список номеров изделий, которые либо находятся в Лондоне, либо для них поставляются детали каким-нибудь поставщиком из Лондона. <br>Вариант 2 1. Удалить все изделия, для которых нет поставок деталей. <br>2. Построить таблицу с номерами поставщиков и парами номеров деталей, таких, что некоторый поставщик поставляет обе указанные детали. <br>Вариант 3 1. Увеличить размер поставки на 10 процентов для всех поставок тех поставщиков, которые поставляют какую-либо красную деталь. <br>2. Построить таблицу с комбинациями «цвет деталигород, где хранится деталь», исключая дубликаты пар (цветгород). <br>Вариант 4 1. Построить таблицу, содержащую список номеров деталей, которые поставляются либо каким-нибудь поставщиком из Лондона, либо для какого- либо изделия в Лондон. <br></div> <div> <br>106 2. Вставить в таблицу «S» нового поставщика с номером «S10» с фамилией <br>Уайт из города Нью-Йорк с неизвестным рейтингом. <br>Вариант 5 1. Удалить все изделия из Рима и все соответствующие поставки. <br>2. Построить таблицу с упорядоченным списком всех городов, в которых размещаются по крайней мере один поставщик, деталь или изделие. <br>Вариант 6 1. Изменить цвет красных деталей с весом менее 15 фунтов на желтый. <br>2. Построить таблицу с номерами изделий и городов, где они изготавливаются, такие, что второй буквой названия города является «О». <br>Вариант 7 1. Увеличить на 10 рейтинг тех поставщиков, объем поставки которых выше среднего. <br>2. Построить таблицу с упорядоченным списком номеров и фамилиями поставщиков, поставляющих детали для изделия с номером «J1». <br><b>Осуществить выборку и модификацию данных согласно выбранному </b><br><b>вами варианту базы данных. </b><br><b>5.16 Контрольные вопросы </b><br>1. Каким образом выполнить простейшие операции вставки строк данных в таблицу средствами T-SQL? <br>2. Как осуществить простейшие операции модификации строк таблицы средствами T-SQL? <br>3. Как выполнить просмотр таблицы? <br>4. Как сохранить результаты запроса в таблице? <br></div> <div> <br>107 <br><b>6 Лабораторная работа № 6. Управление и манипулирование </b><br><b>данными </b><br><b>Цель работы:</b> выработка умений и навыков работы с операторами <br><INSERT>, <update>, <DELETE> и простейшими формами оператора <br><SELECT>. <br><b>Используемое программное обеспечение:</b> Microsoft SQL Server 2017. <br><i>Язык управления данными</i> используется для управления правами доступа к данным и выполнением процедур в многопользовательской среде. Более точно его можно назвать «язык управления доступом». Он состоит из двух основных команд: <br>− <GRANT> – предоставить привилегии пользователю или приложению на манипулирование объектами. <br>− <REVOKE> – отменить привилегии пользователя или приложения <br>(забрать права). <br>Операторы манипулирования данными: <br>− <SELECT> – отобрать строки из таблиц. <br>− <INSERT> – добавить строки в таблицу. <br>− <update> – изменить строки в таблице. <br>− <DELETE> – удалить строки в таблице. <br><b>6.1 Управление данными. Предоставление права доступа к объекту </b><br><b>базы данных с помощью <Query Analizer> </b><br>1. На панели <Editor> введите следующий оператор <GRANT>: <br>GRANT UPDATE, SELECT, INSERT, DELETE <br>ON Поставщик <br>TO PUBLIC <br>2. Выделите оператор <GRANT> и выполните его. <br></div> <div> <br>108 <br>На вкладке <Messages> панели <Results> выводится сообщение о том, что команда успешно завершена (рисунок 1). <br>Рисунок 1 – Предоставление права доступа к таблице «Поставщик» <br>3. Введите следующий оператор <EXEC>: <br>EXEC sp_helprotect Поставщик <br>4. Исполните оператор <EXEC>. <br>На вкладке <Grids> панели <Results> отображаются данные о разрешениях пользователя для таблицы «Поставщик». Роли предоставлено право доступа <SELECT>, <update>, <INSERT>, <DELETE> для этой таблицы <br>(рисунок 2). <br></div> <div> <br>109 <br>Рисунок 2 – Отображение данных о разрешениях пользователя для таблицы «Поставщик» с помощью <Query Analizer> <br><b>6.2 Отзыв права доступа к объекту базы данных </b><br>1. Введите следующий оператор <REVOKE>: <br>REVOKE UPDATE, SELECT, INSERT, DELETE <br>ON Поставщик <br>TO PUBLIC <br>2. Выделите оператор <REVOKE> и выполните его. <br>На вкладке <Messages> панели <Results> выводится сообщение, свидетельствующее об успешном завершении команды (рисунок 3). <br></div> <div> <br>110 <br>Рисунок 3 – Отзыв права доступа к таблице «Поставщик» <br>3. Введите следующий оператор <EXEC>: <br>EXEC sp_helprotect Поставщик <br>4. Исполните оператор <EXEC>. <br>На вкладке <Messages> панели <Results> выводится сообщение об отсутствии строк, совпадающих с критерием запроса. Поскольку у роли права доступа <SELECT> отозваны, теперь нет и предоставленных или отобранных прав доступа, о которых сообщает хранимая процедура (рисунок 4). <br>Рисунок 4 – Сообщение об отсутствии прав доступа на выборку данных из таблицы «Поставщик» <br></div> <div> <br>111 <br><b>6.3 Предоставление права доступа к объекту базы данных с помощью </b><br><b><Enterprise Manager> </b><br>1. Запустите <Enterprise Manager>. <br>2. В базе данных <Northwind> выберете таблицу «Поставщик» и щелкните по ней 2 раза. <br>3. В появившимся окне <Свойства таблицы> нажмите на кнопку <br>4. Для роли разрешите выборку и вставку, запретите изменение и удаление (рисунок 5). <br>Рисунок 5 – Предоставление права доступа к таблице «Поставщик» с помощью <Enterprise Manager> <br></div> <div> <br>112 5. Выбрав роль и нажав на кнопку <columns>, можно выбрать для каких столбцов будет разрешена или запрещена выборка и изменение. <br>6. Разрешите роли изменение и удаление. <br><b>6.4 Манипулирование данными. Обновление данных </b><br>1. Запустите <Query Analizer>. <br>2. Введите следующий оператор <update> и выполните его: <br>USE Northwind <br>UPDATE Поставщик <br>SET Тел_поставщика = 89246541252 WHERE Код_поставщика = 03 <br>На вкладке <Messages> появляется сообщение о том, что исполнение оператора повлияло на одну строку (рисунок 6). <br>Рисунок 6 – Обновление данных в таблице «Поставщик» <br><b>6.5 Выборка данных </b><br>Исполните следующий оператор <SELECT>: <br>SELECT * FROM Поставщик <br>На панели <Grids> отображаются три строки из таблицы «Поставщик». <br>Обратите внимание, что значение поля <Тел_поставщика> для Захарова М. В. теперь равно 89246541252 (рисунок 7). <br></div> <div> <br>113 <br>Рисунок 7 – Извлечение всех данных из таблицы «Поставщик» <br><b>6.6 Удаление данных </b><br>Наберите следующий оператор <DELETE> и исполните его: <br>DELETE FROM Поставщик <br>WHERE Код_поставщика = 02 <br>На вкладке <Messages> выводится сообщение о том, что исполнение оператора повлиял на одну строку (рисунок 8). <br>Рисунок 8 – Удаление из таблицы «Поставщик» записей, у которых <br><Код_поставщика> = 02 <br>Исполните следующий оператор <SELECT>: <br></div> <div> <br>114 <br>SELECT * FROM Поставщик <br>Теперь на панели <Grids> осталось только две строки из таблицы <br>«Поставщик». Обратите внимание на отсутствие в списке имени Иванов С. П. <br>(рисунок 9). <br>Рисунок 9 – Просмотр изменений в таблице «Поставщик» <br><b>6.7 Удаление таблицы </b><br>Введите следующий оператор <DROP> и исполните его: <br>DROP TABLE Поставщик <br>На вкладке <Messages> появляется сообщение об ошибке. Обеспечение целостности данных, созданное в лабораторной работе № 4, не позволяет удалить эту таблицу. Таблицу «Поставщик» возможно удалить, если только перед этим удалить ее связь с таблицей «Товар». <br>Закройте <SQL Query Analyzer> <br><b>6.8 Контрольное задание </b><br>Назначьте права доступа к данным в базе данных согласно выбранному вами варианту. <br></div> <div> <br>115 <br><b>6.9 Контрольные вопросы </b><br>1. Какие операторы управления Вы знаете? <br>2. Перечислите операторы манипулирования данными. <br>3. Опишите синтаксис операторов <INSERT>, <update>, <DELETE>. <br></div> <div> <br>116 <br><b>7 Лабораторная работа № 7. Управление и манипулирование </b><br><b>данными </b><br><b>Цель работы:</b> используя операторы T-SQL, научиться создавать хранимые процедуры и управлять ими. <br><b>Используемое программное обеспечение:</b> Microsoft SQL Server 2017. <br><b>Хранимая процедура</b> – компилируемый объект базы данных, хранящийся на сервере и представляющий собой набор SQL-инструкций. Хранимые процедуры могут обладать: <br>1) входными и выходными параметрами; <br>2) локальными переменными; <br>3) циклами и ветвлениями, то есть в них могут использоваться инструкции управления потоком; <br>4) в них могут производиться: <br>− стандартные операции с базами данных (как DDL, так и DML); <br>− числовые вычисления; <br>− операции над символьными данными. <br>5) результаты которых могут присваиваться переменным и параметрам. <br>С точки зрения приложений, работающих с базами данных, <i>хранимые </i><br><i>процедуры</i> – это подпрограммы, которые выполнятся на сервере. <br>По отношению к базе данных, <i>хранимые процедуры</i> – это объекты, которые создаются и хранятся в ней. Они могут быть вызваны из клиентских приложений. <br>При этом одна процедура может быть использована в любом количестве клиентских приложений. <br><b>7.1 Создание и вызов процедуры. Создание процедуры </b><br>CREATE PROC[EDURE] <i>имя_процедуры</i> [; <i>номер</i>] <br>[@параметр тип_данных [VARYING] [= <i>значение</i>] [OUTPUT] <br>[,…] <br></div> <div> <br>117 <br>[WITH {RECOMPILE I ENCRYPTION|RECOMPILE|ENCRYPTION}] <br>[FOR REPLICATION] <br>AS <br><i>команды</i> SQL <br>[RETURN [<i>код_статуса</i>]] <br><i><b>Имя_процедуры</b></i> подчиняется стандартным правилам выбора имен объектов: <br>− в рамках одной базы данных для процедур с одинаковыми именем и владельцем номер должен быть уникальным; <br>− имена локальных временных процедур должны начинаться с символа #; <br>− имена глобальных временных процедур должны начинаться с символов <br>##. <br><i><b>Номер</b></i> используется для группировки процедур как единого целого (часто в сочетании с версией приложения). <br><i><b>@параметр</b></i> – представляет параметр, передаваемый и / или получаемый из процедуры. Процедура имеет до 1024 параметров. Параметры могут принимать значения <NULL>. Они не могут использоваться в процедуре вместо объектов баз данных, если только они не включаются в команду <EXEC>. <br>Параметры относятся к встроенным либо пользовательским типам данных. <br>Обратите внимание, правила, значения по умолчанию и свойства столбцов не относятся к параметрам, определяемым пользовательскими типами данных. <br>Параметр может относиться к любому типу данных SQL Server, в том числе <br><text>, <image> или <cursor>. Для параметров типа <cursor> ключевые слова <br><i><b>varying</b></i> и <i><b>output</b></i> являются обязательными. <br><b>VARYING</b> означает, что параметр возвращает итоговый набор. <br>Используется только для типа данных <CURSOR>. <br><i><b>Значение</b></i> определяет значение параметра по умолчанию. Может быть любой константой или <NULL>. <br></div> <div> <br>118 <br><b>OUTPUT</b> означает, что параметр является выходным, то есть может возвращаться стороне, вызвавшей процедуру. Параметры типа <CURSOR> обязаны быть выходными. <br><b>ENCRYPTION</b> означает, что таблица <syscomment> должна шифроваться <br>(благодаря чему текст процедуры скрывается от постороннего взгляда). <br><b>FOR REPLICATION</b> означает, что процедура участвует в процессе публикации. Обратите внимание, параметры <FOR REPLICATION> и <br><RECOMPILE> являются взаимоисключающими. <br><i><b>Команды SQL</b></i> – произвольное количество команд SQL, составляющих тело процедуры. Максимальный объем команд не должен превышать 128 Кбайт. <br><b>7.2 Вызов процедуры </b><br>[EXEC[UTE]] <br>[@<i>код_возврата</i> <br>= <br>] <br><i>имя_процедуры</i> <br>[;номер] <br>[@<i>список_параметров</i>] [WITH RECOMPILE] <br><i><b>@код_возврата</b></i> – переменная для сохранения кода возврата процедуры. <br><i><b>Номер</b></i> – числовой идентификатор процедуры. При отсутствии этого аргумента выполняется процедура с максимальным номером версии. <br><i><b>@список параметров</b></i> – список параметров процедуры. Параметры передаются как по имени (имя = значение), так и по позиции в списке, но если некоторый параметр передается по имени, все последующие параметры в списке тоже должны передаваться по имени. Чтобы пропустить параметр в середине списка, следует передавать остальные параметры по имени. <br><b>WITH RECOMPILE</b> – процедура заново компилируется при выполнении. <br>Удаление процедуры: <br>DROP PROC имя_процедуры [, имя_процедуры[, ...]] <br></div> <div> <br>119 <br><b>7.3 Системные хранимые процедуры. Просмотр системных хранимых </b><br><b>процедур в базе данных <Master> </b><br>1. Откройте <Query Analyzer> и подключитесь к локальному серверу. <br>2. Откройте окно <Object Browser>, если оно еще не открыто. В окне <br><Object Browser> выводится иерархическое дерево объектов базы данных. <br>3. Раскройте узел <Master>. Появляется список типов объектов. Обратите внимание на узлы <Stored Procedures> и <Extended Procedures>. <br>4. Раскройте узел <Stored Procedures>. Появляется список хранимых процедур и расширенных хранимых процедур базы данных <Master>. <br>5. Изучите имена процедур из списка. Обратите внимание, что владельцем всех процедур является <dbo>. <br>6. Раскройте системную хранимую процедуру dbo.sp_who. Появляются узлы и <Dependencies>. 7. Раскройте узел <br> (рисунок 1). <br>Рисунок 1 – Просмотр параметров системной хранимой процедуры <br>«dbo.sp_who» <br>Обратите внимание, что для этой процедуры определены два параметра: <br><@RETURN_VALUE> и <@loginame. @RETURN_VALUE> – это встроенный <br></div> <div> <br>120 параметр, который используется для хранения кодов возврата, он есть у всех хранимых процедур, <@loginame> – это входной параметр. <br>8. Зависимость <Dependencies>. <br>Обратите внимание, что эта хранимая процедура зависит только от таблицы «dbo.sys-processes». Это системная таблица, которая хранится в базе данных <Master>. Системная хранимая процедура «sp_who» выполняет запрос к таблице «SysProcesses» и выводит часть ее данных в своем результирующем наборе. Эту таблицу можно найти, раскрыв узел <System Tables>. <br>9. Если вы уже просмотрели таблицы «dbo.sysprocesses», вернитесь к системной хранимой процедуре «sp_who» в окне <Object Browser>. <br>10. Прокрутите содержимое <Object Browser>, пока не увидите узел <br><Extended Procedures>. Обратите внимание на три хранимые процедуры с префиксом <хр_>, которые расположены непосредственно над узлом <Extended <br>Procedures>. Они не являются расширенными. <br>11. Раскройте узел <Extended Procedures>. <br>Прокручивая список объектов этого узла, обратите внимание на наличие в нем как системных, так и расширенных хранимых процедур. Большинство процедур из этого узла являются расширенными (рисунок 2). <br></div> <div> <br>121 <br>Рисунок 2 – Просмотр хранимых процедур узла Extended Procedures <br></div> <div> <br>122 12. Оставьте <Query Analyzer> открытым. <br><b>7.4 Методы просмотра содержимого хранимой процедуры </b><br>1. Щелкните правой кнопкой мыши по объекту «dbo.sp_who». Появляется контекстное меню этого объекта. <br>2. Выберите <Scripting Options> (рисунок 3). <br>Рисунок 3 – Просмотр содержимого хранимой процедуры (1-й способ) <br>Выводится диалоговое окно <Options>. <br>3. Установите флажок <Include Descriptive Headers In The Script> и щелкните <ОК> (рисунок 4). <br></div> <div> <br>123 <br>Рисунок 4 – Установление флажка <Include Descriptive Headers In The <br>Script> <br>Этот параметр выводит около заголовка текста хранимой процедуры ее имя и дату создания. <br>4. Щелкните правой кнопкой мыши по объекту «dbo.sp_who». <br>Выводится контекстное меню для него. <br>5. Укажите и щелкните <Create> <br>(рисунок 5). <br></div> <div> <br>124 <br>Рисунок 5 – Просмотр содержимого хранимой процедуры (2-й способ) <br>В окне <Query> появляется хранимая процедура «dbo.sp_who». <br>Обратите внимание, что рядом с заголовком файла появляются ключевые слова <CREATE PROCEDURE> (рисунок 6). <br>Рисунок 6 – Листинг хранимой процедуры <sp_who> <br>6. Щелкните на панели инструментов кнопку <New Query> или нажмите <br><CTRL+N>. На правой панели появляется окно нового запроса. <br>7. На панели <Editor> в окне <Query> введите следующий код Transact-<br>SQL: sp_helptext [master.dbo.sp_who] <br></div> <div> <br>125 <br>В этой команде для вывода содержимого системной хранимой процедуры <br>«sp_who», которая содержится в базе данных <Master>, используется системная хранимая процедура «sp_helptext». Хотя указывать полное имя хранимой процедуры не обязательно, лучше это все-таки делать – в этом случае вы гарантированно откроете именно тот объект, который вам нужен. <br>8. Исполните команду. <br>Содержимое системной хранимой процедуры «sp_who» выводится на вкладке <Grids> панели <Results> (рисунок 7). <br>Рисунок 7 – Содержимое системной хранимой процедуры <sp_who> <br></div> <div> <br>126 <br><b>7.5 Создание и исполнение хранимой процедуры в базе данных </b><br><b><Northwind> </b><br>1. Откройте <Query Analyzer> и подключитесь к локальному серверу. <br>2. Закройте окно <Object Browser>, если оно открыто. <br>3. Раскройте окно <Query>, чтобы оно заняло все рабочее пространство в <br><Query Analyzer>. <br>4. На панели <Editor> в окне <Query> введите следующий код: <br>USE Northwind <br>GO <br>CREATE PROCEDURE dbo.CustOrderHistRep <br>@CustomerID char(5) <br>AS <br>SELECT ContactName, ContactTitle <br>FROM Customers WHERE CustomerID = @CustomerID <br>SELECT ProductName, Total=SUM(Quantity) <br>FROM Products P, [Order Details] OD, Orders O, Customers С <br>WHERE <br>С.CustomerID = @CustomerID AND С.CustomerID = O.CustomerID <br>AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID <br>GROUP BY ProductName <br>GO <br>При исполнении первого пакета база данных <Northwind> становится текущей. Далее создается процедура <CustOrderHistRep> и определяется единственный входной параметр – <@CustomerID>. Входной параметр может располагаться в одной строке с оператором <CREATE PROCEDURE>, но здесь для ясности он перенесен в отдельную строку. Аналогичный подход использован далее при разбиении по строкам кода операторов <SELECT>. Обратите внимание, что для параметра <@CustomerID> задан тип данных <char(5)>. Если выполнить запрос к таблице «[Northwind].[dbo].[Customers]», то видно, что длина <br></div> <div> <br>127 всех идентификаторов покупателей равна пяти символам. Строка, в которой находится единственное ключевое слово <as>, является разделительной линией между созданием процедуры в таблице «SysObjects» и текстом процедуры, сохраняемым в таблице «SysComments». <br>5. Просмотрите операторы <SELECT>, которые расположены ниже ключевого слова <as>. <br>При исполнении запроса в ответ на ввод идентификатора покупателя первый оператор <SELECT> выводит имя контактного лица и заголовок контактной информации. Второй оператор <SELECT> выводит названия и общее количество (<SUM>) каждого товара, который приобрел покупатель. <br>Результирующий набор возвращает данные, сгруппированные по названию товара. Можно заметить, что несколько соединений реализовано в конструкции <br><WHERE>, а не <FROM>. Во время модификации процедуры мы переместим выражения <JOIN> в конструкцию <FROM> (рисунок 8). <br>Рисунок 8 – Создание хранимой процедуры <CustOrderHistRep> <br></div> <div> <br>128 <br><b>7.6 Просмотр хранимых процедур в <Query Analyzer> </b><br>1. Откройте <Object Browser> в <Query Analyzer> и выберите базу данных <br><Northwind>. <br>2. Раскройте узел <Stored Procedures>. <br>Появляются все хранимые процедуры, созданные в базе данных <br><Northwind>. <br>1. Раскройте хранимую процедуру «dbo.CustOrderHistRep». <br>Обратите внимание, что эта хранимая процедура принадлежит <dbo> и что в «dbo.CustOrderHistRep» появляются два узла: и <Dependencies>. <br>2. Раскройте узел <br>Обратите внимание на наличие у этой хранимой процедуры двух параметров: созданного вами <@CustomerID> и встроенного параметра для хранения кода возврата <@RETURN_VALUE>. <br>3. Раскройте узел <Dependencies>. <br>Обратите внимание, что хранимая процедура зависит от четырех объектов <br>(таблиц «Orders», «Products», «Order Details» и «Customers» из базы данных <br><Northwind>). От самой хранимой процедуры не зависит ни один объект <br>(рисунок 9). <br></div> <div> <br>129 <br>Рисунок 9 – Отображение содержимого узлов и <br><Dependencies> хранимой процедуры «CustOrderHistRep» <br>1. Переключитесь на панель <Editor> окна <Query>. <br>2. Введите в пустой строке в нижней части панели <Editor> и исполните следующую команду: sp_depends custorderhistrep <br>Хранимая процедура <br>«sp_depends» проверяет процедуру <br>«CustOrderHistRep», чтобы определить ее зависимости. <br>Обратите внимание на наличие в поле <Name> повторяющихся элементов. <br>Однако все записи с повторяющимися элементами отличаются значениями других полей (рисунок 10). <br>Рисунок 10 – Проверка процедуры «CustOrderHistRep» для определения ее зависимости <br></div> <div> <br>130 3. Не закрывайте <Query Analyzer>, он потребуется для выполнения следующего задания. <br><b>7.7 Исполнение хранимой процедуры </b><br>1. В нижней части панели <Editor> введите в пустой строке и исполните следующую команду: <br>EXEC [Northwind]. [dbo]. [custorderhistrep] <br>@CustomerID = 'thecr' <br>Для запуска хранимой процедуры «CustOrderHistRep» использована сокращенная версия ключевого слова <EXECUTE> – <EXEC>. Обратите внимание на использование полного имени. Это не обязательно, но в данном случае такой прием позволяет запустить процедуру, не делая активной базу данных <Northwind>. <br>Возвращаются два результирующих набора. Первый из них (имя контактного лица и заголовок контактной информа ции) выводится в верхней части панели <Results>. Второй результирующий набор (название и количество товара) отображается в нижней части панели <Results> (рисунок 11). <br>Рисунок 11 – Вызов процедуры «CustOrderHistRep» с указанием значения параметра <br>2. В предыдущем примере для запуска хранимой процедуры было задано ключевое слово <EXEC>. Обязательно ли его использовать? <br></div> <div> <br>131 3. <br>Найдите в <br><Object <br>Browser> хранимую процедуру <br>«dbo.CustOrderHistRep» и щелкните по ней правой кнопкой мыши. <br>4. Выберите из контекстного меню <Script Object to New Windows As> и щелкните <Execute>. <Query Analyzer> загружает в редактор <Query Window> новую страницу, появляется оператор <EXECUTE> для процедуры <br>«dbo.CustOrderHistRep». Обратите внимание на объявление двух переменных: <br><@RC> и <@CustomerID>. Первая переменная используется для хранения любых кодов возврата, являющихся частью процедуры, а вторая хранит значение входного параметра <@CustomerID>. Обратите внимание, что в операторе <br><EXEC> переменная <@RC> соответствует хранимой процедуре. <br>5. На панели <Editor> щелкните мышью в конце оператора <EXEC>, чтобы после слова <@CustomerID> появился мигающий курсор. Допишите к концу строки следующее: = 'thecr'. Теперь оператор <EXEC> должен принять следующий вид: <br>EXEC @RC = [Northwind].[dbo].[CustOrderHistRep] @CustomerID = 'thecr' <br>6. Исполните запрос. <br>7. Закройте новую страницу, созданную в окне <Query>, но не закрывайте <br><Query Analyzer> и исходную страницу, которая появилась на панели <Editor>. <br>8. Выводится сообщение <Query Analyzer> с запросом на сохранение внесенных изменений. <br>9. Щелкните <No>. <br>На панели <Editor> появляется исходная страница. <br></div> <div> <br>132 <br><b>7.8 Модификация и удаление хранимой процедуры. Модификация </b><br><b>хранимой процедуры </b><br>1. На панели <Editor> в окне <Query> введите следующий код: <br>USE Northwind <br>GO <br>CREATE PROCEDURE dbo.CustOrderHistRep <br>@CustomerID char(5) <br>AS <br>SELECT ContactName, ContactTitle <br>FROM Customers WHERE CustomerID = @CustomerID <br>SELECT ProductName, Total=SUM(Quantity) <br>FROM Products P, [Order Details] OD, Orders O, Customers С <br>WHERE <br>С.CustomerID = @CustomerID AND С.CustomerID = O.CustomerID <br>AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID <br>GROUP BY ProductName <br>GO <br>2. Замените ключевое слово <CREATE> на <alter>. <br>При изменении текста процедуры ключевое слово <alter> позволяет изменять хранимую процедуру без потери любых ее свойств (рисунок 12). <br>Рисунок 12 – Изменение процедуры «CustOrderHistRep» <br></div> <div> <br>133 3. Необходимо отсортировать число заказов по убыванию. Для этого ниже оператора <GROUP BY ProductName> введите следующий оператор: <br>ORDER BY Total DESC <br>4. Также решено переместить соединения таблиц из конструкции <br><WHERE> в конструкцию <FROM>. В окончательном виде программа выглядит примерно так: <br>USE Northwind <br>GO <br>ALTER PROCEDURE dbo.CustOrderHistRep <br>@CustomerID char(5) <br>AS <br>SELECT ContactName, ContactTitle <br>FROM Customers WHERE CustomerID = @CustomerID <br>SELECT ProductName, Total=SUM(Quantity) <br>FROM Products P INNER JOIN [Order Details] OD <br>ON P.ProductID = OD.ProductID <br>JOIN Orders O <br>ON OD.OrderID = O.OrderID <br>JOIN Customers С ON O. CustomerID = С.CustomerID <br>WHERE С.CustomerID = @CustomerID <br>GROUP BY ProductName <br>ORDER BY Total DESC <br>GO <br>5. Исполните запрос (рисунок 13). <br></div> <div> <br>134 <br>Рисунок 13 – Внесение изменений в процедуру «CustOrderHistRep» <br>6. <a href="/torjestvennaya-linejka-posvyashennaya-dnyu-uchitelya-zvuchit-k/index.html" title="Торжественная линейка, посвященная Дню учителя. Звучит красивая музыка, выходят ведущие. Ведущий 1">Чтобы убедиться</a>, что нужные изменения внесены, перейдите в нижнюю часть панели <Editor> нажмите <ENTER>, затем введите и исполните следующий оператор: sp_helptext custorderhistrep <br>На вкладке <Grids> панели <Results> появляется текст хранимой процедуры (рисунок 14). <br></div> <div> <br>135 <br>Рисунок 14 – Просмотр текста хранимой процедуры «CustOrderHistRep» <br>7. Оставьте <Query Analyzer> открытым. <br><b>7.9 Удаление хранимой процедуры </b><br>1. Перейдите в нижнюю часть панели <Editor> нажмите <ENTER>, затем введите и исполните следующий оператор: <br>DROP PROCEDURE dbo.custorderhistrep <br>Хранимая процедура удаляется из базы данных <Northwind>. <br>2. Проверьте с помощью <Object Browser> в <Query Analyzer> или <br><Enterprise Manager>, удалена ли хранимая процедура. <br>3. Закройте <Query Analyzer>. <br>Выводится запрос на сохранение сценария. <br>4. Если вы хотите сохранить сценарий, нажмите <Yes>, в противном случае <br>– <No>. <br></div> <div> <br>136 <br><b>7.10 Контрольное задание </b><br>Создайте не менее трех хранимых процедур в базе данных согласно выбранному вами варианту. <br><b>7.11 Контрольные вопросы </b><br>1. Что такое хранимая процедура? <br>2. Чем могут обладать хранимые процедуры? <br>3. Опишите методы просмотра содержимого хранимой процедуры. <br>4. Как создать хранимую процедуру? <br>5. Каким образом можно модифицировать хранимую процедуру? <br>6. Как осуществить просмотр хранимой процедуры? <br>7. Как удалить хранимую процедуру? <br></div> <div> <br>137 <br><b>8 Лабораторная работа № 8. Триггеры </b><br><b>Цель работы:</b> используя операторы T-SQL, научиться создавать, просматривать, модифицировать и удалять триггеры. <br><b>Используемое программное обеспечение:</b> Microsoft SQL Server 2017. <br><b>Триггеры</b> – это специальный вид хранимой процедуры, которую <i>SQL </i><br><i>Server</i> вызывает при выполнении операций модификации соответствующих таблиц. Триггер автоматически активизируется при выполнении операции, с которой он связан. Триггеры связываются с одной или несколькими операциями модификации над одной таблицей. <br><b>8.1 Создание триггера </b><br>CREATE TRIGGER <имя_триггера> <br>ON <имя_таблицы> <br>FOR {[INSERT] [, UPDATE] [, DELETE]} <br>[WITH ENCRIPTING] <br>AS <br>SQL-операторы (тело триггера) <br>Ограничения: <br>− Нельзя использовать в теле триггера операции создания объектов базы данных (новую базу, таблицу, индекс, хранимую процедуру, триггер, представление). <br>− Нельзя использовать в триггере команду удаления объектов <DROP>. <br>− Нельзя использовать в теле триггера команды изменения базовых объектов <alter>. <br>− Нельзя изменять права доступа к объектам базы данных. <br>− Триггер не может возвращать никаких значений. <br></div> <div> <br>138 <br><b>8.2 Пример создания триггера </b><br>Создадим триггер, который срабатывает при удалении экземпляра некоторой книги, например, в случае утери этой книги читателем. При этом триггер проверяет: если остался еще хоть один экземпляр данной книги в библиотеке, и если это был последний экземпляр книги в библиотеке – удаляет описание данной книги из предметного каталога. <br>CREATE TRIGGER DEL_EXEMP ON dbo.examplar <br>FOR DELETE <br>AS <br>DECLARE @Ntek int <br>DECLARE @DEL_EX varchar(12) <br>Begin <br>Select @DEL_EX = ISBN From deleted <br>Exec @Ntek=COUNT_EX @DEL_EX <br>If @Ntek = 0 delete from BOOKS WHERE BOOKS.ISBN=@DEL_EX <br>END <br><b>8.3 Создание простых триггеров для таблицы «Товар» из базы данных </b><br><b><Northwind> </b><br>1. Откройте <Query Analyzer> и подключитесь к локальному серверу. <br>2. На панели Editor в окне <Query> введите и исполните следующий код: <br>USE Northwind <br>GO <br>CREATE TRIGGER dbo.insertindicator <br>ON dbo.Товар <br>AFTER INSERT <br>AS <br>PRINT 'The insert trigger fired.' <br></div> <div> <br>139 <br>Оператор <CREATE TRIGGER> создает триггер «Insertindicator» и привязывает его к таблице «Товар» в базе данных <Northwind>. Этот триггер срабатывает при добавлении данных в таблицу «Товар» и выводит на панели <br><Grids> вкладки <Results> сообщение. <br>3. На панели <Editor> в окне <Query> введите и исполните следующий код: <br>CREATE TRIGGER dbo.updateindicator <br>ON dbo.Товар <br>AFTER UPDATE <br>AS <br>PRINT 'The update trigger fired.' <br>GO <br>CREATE TRIGGER dbo.deleteindicator <br>ON dbo.Товар <br>AFTER DELETE <br>AS <br>IF @@ROWCOUNT <> 0 <br>PRINT 'The delete trigger fired.' <br>Оператор <CREATE TRIGGER> создает триггеры «UpdateIndicator» и <br>«DeleteIndicator» и привязывает их к таблице «Товар» в базе данных <br><Northwind>. Если происходит событие <update> или <DELETE>, эти триггеры выводят на вкладке <Grids> панели <Results> сообщение. Обратите внимание, что триггер «DeleteIndicator» проверяет значение функции <br><@@ROWCOUNT>. Если удалена одна или несколько строк, выводится сообщение. <br><b>8.4 Проверка триггеров таблицы «Товар» </b><br>1. На панели <Editor> в окне <Query> введите и исполните следующий код: <br>INSERT INTO Товар (Код_товара, Код_поставщика, Название_товара, <br>Количество_товара, Цена_товара) <br></div> <div> <br>140 <br>VALUES (3, 2, 'Фотоаппарат Canon', 5, 2000) <br>В таблицу «Товар» добавляется запись, триггер «InsertIndicator» срабатывает и выводит сообщение на вкладке <Messages> панели <Results>. <br>2. На панели <Editor> в окне <Query> введите и исполните следующий код: <br>UPDATE Товар <br>SET Товар.Название_товара = 'Фотоаппарат_LG' <br>WHERE Товар.Название_товара = 'Фотоаппарат Canon' <br>В таблице «Товар» обновляется запись, триггер «UpdateIndicator» срабатывает и выводит сообщение на вкладке <Messages> панели <Results>. <br>3. На панели <Editor> в окне <Query> введите и исполните следующий код: <br>DELETE Товар where Название_товара = 'Фотоаппарат_LG' <br>Из таблицы «Товар» удаляется запись, триггер «DeleteIndicator» срабатывает и выводит сообщение на вкладке <Messages> панели <Results>. <br><b>8.4 Переименование, модификация и просмотр триггера </b><br>1. На панели <Editor> в окне <Query> введите и исполните следующую команду для запуска хранимой процедуры: sp_rename @objname=insertindicator, @newname=insupdcontrol <br>Системная хранимая процедура «sp_rename» переименовывает триггер <br>«InsertIndicator» в «InsUpdControl». <br>2. Исполните запрос. <br>На вкладке <Messages> панели <Results> выводится предупреждение о том, что переименование объекта может повлечь за собой сбои в работе сценариев и хранимых процедур. Это сообщение также свидетельствует об успешном завершении операции переименования. <br>3. Введите на панели <Editor> в окне <Query> и исполните следующую команду для запуска хранимой процедуры: sp_helptrigger @tabname = Товар <br></div> <div> <br>141 <br>Системная хранимая процедура «sp_helptrigger» выводит список триггеров, применяемых к таблице «Товар». <br>4. На панели <Editor> в окне <Query> введите и исполните следующий код: <br>ALTER TRIGGER dbo.insupdcontrol <br>ON dbo.Товар <br>INSTEAD OF INSERT, UPDATE <br>AS <br>PRINT 'Inserts and updates are not allowed at this time.' <br>В результате модификации переименованный триггер преобразуется в триггер «INSTEAD OF», который предотвращает все операции добавления и обновления в таблице «Товар». С помощью триггеров этого типа можно временно запретить внесение изменений в таблицу. Для включения и выключения триггеров используют оператор <alter table>. <br>5. Введите на панели <Editor> в окне <Query> и исполните следующий код: <br>SET NOCOUNT ON <br>INSERT INTO Товар (Код_товара, Код_поставщика, Название_товара, <br>Количество_товара, Цена_товара) <br>VALUES (4, 3, 'Фотоаппарат Samsung', 3, 5000) <br>SET NOCOUNT OFF <br>Триггер «INSTEAD OF» срабатывает и выводит сообщение, в котором говорится, что в данный момент обновление запрещено. Активирован параметр <br><NOCOUNT>, поэтому на вкладке <Messages> панели <Results> не выводится сообщение с числом строк, на которое повлияло исполнение запроса. <br>6. Чтобы убедиться, что в таблицу «Товар» не добавлено ни одной записи, исполните для этой таблицы оператор <SELECT>. <br>7. На панели <Editor> в окне <Query> введите и исполните следующую команду для запуска хранимой процедуры: sp_helptext @objname=insupdcontrol <br>Хранимая процедура выводит содержимое триггера «InsUpdControl». <br></div> <div> <br>142 <br><b>8.5 Отключение и удаление триггера </b><br>1. На панели <Editor> в окне <Query> введите и исполните следующий код: <br>ALTER TABLE Товар DISABLE TRIGGER insupdcontrol <br>Оператор <alter table> отключает триггер «InsUpdControl» в таблице <br>«Товар». <br>2. На панели <Editor> в окне <Query> введите и исполните следующий код: <br>INSERT INTO Товар (Код_товара, Код_поставщика, Название_товара, <br>Количество_товара, Цена_товара) <br>SELECT * FROM Товар where Название_товара = 'Фотоаппарат Samsung' <br>Запись успешно добавляется в таблицу «Товар», добавленная запись выводится на вкладке <Grids> панели <Results>. <br>3. На панели <Editor> в окне <Query> введите и исполните следующий код: <br>DROP TRIGGER insupdcontrol, updateindicator, deleteindicator <br>DELETE Товар where Название_товара = 'Фотоаппарат Samsung' <br>Оператор <DROP TRIGGER> удаляет все три триггера, привязанных к таблице «Товар». Оператор <DELETE> удаляет запись, ранее добавленную к таблице «Товар». <br><b>8.6 Контрольное задание </b><br>Создать не менее трех триггеров в базе данных согласно выбранному вами варианту. <br><b>8.7 Контрольные вопросы </b><br>1. Что такое триггер? <br>2. Каково назначение триггеров? <br>3. В чем отличие триггера от хранимой процедуры? <br>4. Как создать триггер? <br></div> <div> <br>143 <br><b>9 Лабораторная работа № 9. Представления </b><br><b>Цель работы:</b> используя язык T-SQL, научиться создавать, модифицировать и удалять представления. <br><b>Используемое программное обеспечение:</b> Microsoft SQL Server 2017. <br><b>Представление</b> – виртуальная (логическая) таблица, представляющая собой поименованный запрос, который будет подставлен как подзапрос при использовании представления. <br>В отличие от обычных таблиц реляционной базы данных, представление не является самостоятельной частью набора данных, хранящегося в базе. <br>Содержимое представления динамически вычисляется на основании данных, находящихся в реальных таблицах. Изменение данных в реальной таблице базы данных немедленно отражается в содержимом всех представлений, построенных на основании этой таблицы. <br><b>9.1 Представления и подзапросы </b><br>Представления могут использовать подзапросы, включая соотнесенные подзапросы. Предположим, ваша компания предусматривает премию для тех продавцов, которые имеют заказчика с самой высокой суммой заказа для любой указанной даты. Вы можете проследить эту информацию с помощью представления: <br>CREATE VIEW Elitesalesforce <br>AS SELECT b.odate, a.snum, a.sname <br>FROM Salespeople a, Orders b <br>WHERE a.snum = b.snum AND b.amt = (SELECT MAX (amt) <br>FROM Orders c WHERE c.odate = b.odate) <br>Если, с другой стороны, премия будет назначаться только продавцу, который имел самую высокую сумму заказа за последние десять лет, вам <br></div> <div> <br>144 необходимо будет проследить их в другом представлении, основанном на первом: <br>CREATE VIEW Bonus <br>AS SELECT DISTINCT snum, sname <br>FROM Elitesalesforce a <br>WHERE 10 <= (SELECT COUNT (*) <br>FROM Elitesalesforce b <br>WHERE a.snum = b.snum) <br>Извлечение из этой таблицы продавца, который будет получать премию, выполняется простым запросом: <br>SELECT * <br>FROM Bonus <br>Если команды модификации могут выполняться в представлении, представление как сообщалось, будет <i>модифицируемым</i>; в противном случае оно предназначено только для чтения при запросе. Не противореча этой терминологии, мы будем использовать выражение «<i>модифицируемое </i><br><i>представление</i>» (updating a view), что означает возможность выполнения в представлении любой из трех команд модификации DML (<INSERT>, <br><update> и <DELETE>), которые могут изменять значения. <br><b>9.2 Модифицируемое представление </b><br><i>Модифицируемое представление</i> – это представление, в котором команда модификации может выполниться, чтобы изменить одну и только одну строку основной таблицы в каждый момент времени, не воздействуя на любые другие строки любой таблицы. <br>Критерии определения модифицируемости представления: <br>1. Оно должно выводиться в одну и только в одну базовую таблицу. <br></div> <div> <br>145 2. Оно должно содержать первичный ключ этой таблицы (это технически не предписывается стандартом <ansi>, но было бы неплохо придерживаться этого). <br>3. Оно не должно иметь никаких полей, которые бы являлись агрегатными функциями. <br>4. Оно не должно содержать <DISTINCT> в своем определении. <br>5. Оно не должно использовать <GROUP BY> или </group></distinct></ansi></delete></update></insert></delete></drop></query></editor></results></grids></query></editor></alter></query></editor></query></editor></select></results></messages></nocount></query></editor></alter></query></editor></query></editor></results></messages></query></editor></results></messages></query></editor></results></messages></query></editor></results></messages></query></editor></results></grids></delete></update></northwind></create></query></editor></results></grids></northwind></create></query></query></northwind></alter></drop></no></yes></query></enterprise></query></object></northwind></enter></editor></query></results></grids></enter></editor></from></where></group></alter></alter></create></query></editor></editor></no></query></editor></query></query></exec></exec></editor></exec></execute></query></query></execute></script></object></exec></results></results></northwind></exec></execute></editor></query></name></editor></query></editor></dependencies></northwind></dependencies></dependencies></dbo></northwind></stored></northwind></query></object></query></custorderhistrep></from></join></from></where></sum></select></select></as></select></as></select></create></custorderhistrep></northwind></query></editor></query></query></object></query></northwind></results></grids></master></query></editor></new></create></query></create></include></include></options></scripting></query></extended></extended></extended></object></object></system></master></dependencies></dependencies></dbo></master></stored></extended></stored></master></object></object></query></master></recompile></for></syscomment></cursor></null></cursor></cursor></cursor></image></text></exec></null></delete></update></insert></sql></messages></drop></grids></select></messages></delete></grids></select></messages></update></query></columns></enterprise></northwind></enterprise></enterprise></select></results></messages></exec></exec></results></messages></revoke></revoke></query></delete></insert></update></select></results></grids></exec></exec></results></messages></grant></grant></editor></query></delete></update></insert></select></revoke></grant></select></delete></update></insert></sql></object></results></messages></query></editor></drop></select></results></messages></query></editor></test></select></results></messages>
1   2   3   4   5   6   7   8   9   ...   12


написать администратору сайта