- •1.2.2Типы представлений — до 5 мин.
- •1.2.3Создание представлений — до 25 мин.
- •1.2.4Использование представлений — до 10 мин.
- •1.2.5Изменение и удаление представлений — до 5 мин.
- •1.2.6Индексированные представления — до 5 мин.
- •2.2.2Создание хранимых процедур — до 15 мин.
- •2.2.3Использование параметров — до 15 мин.
- •2.2.4Использование локальных переменных внутри хранимой процедуры — до 15 мин.
- •2.2.5Использование return для возвращаемых значений — до 10 мин.
- •2.2.6Использование select для возвращаемых значений — до 10 мин.
- •2.2.7Управление хранимыми процедурами с помощью t-sql — до 10 мин.
- •3.2.2Когда использовать триггеры —до 10 мин.
- •3.2.3Создание триггеров — до 10 мин.
- •3.2.4Создание триггера типа delete — до 10 мин.
- •3.2.5Создание триггера типа insert — до 5 мин.
- •3.2.6Создание триггера типа update — до 10 мин.
- •3.2.7Создание триггера instead of — до 10 мин.
- •3.2.8Использование триггеров after — до 5 мин.
- •3.2.9Использование вложенных триггеров — до 10 мин.
- •3.2.10Управление триггерами с помощью операторов t-sql — до 5 мин.
- •4.2.2Уровни изолированности — до 10 мин.
- •4.2.3Поведение параллельных транзакций — до 10 мин.
- •4.2.4Режимы транзакций — до 20 мин.
- •4.2.5Вложенные транзакции — до 15 мин.
- •4.2.6Откаты транзакций — до 15 мин.
- •4.2.7Точки сохранения — до 10 мин.
- •5.2.2Уровни блокировок — до 15 мин.
- •5.2.3Режимы блокировки — до 20 мин.
- •5.2.4Блокирование и взаимоблокировки — до 20 мин.
- •5.2.5Подсказки блокировки — до 20 мин.
- •6.2.2Логическая оптимизация запросов — до 20 мин.
- •6.2.3Оптимизация плана исполнения запроса — до 15 мин.
- •6.2.4Подсказки оптимизатору запросов — до 15 мин.
- •6.2.5Оптимизация с использованием sql Server 2000 Index Tuning Wizard и sql Server 2005 Database Tuning Advisor — до 30 мин.
- •7.2.2Режимы аутентификации — до 15 мин.
- •7.2.3Учетные записи и пользователи — до 20 мин.
- •7.2.4Администрирование полномочий доступа к базам данных — до 20 мин.
- •7.2.5Администрирование ролей баз данных — до 10 мин.
- •7.2.6Делегирование учетной записи безопасности — до 15 мин.
- •8.2.2Внедрение sql кода (sql Injection) — до 20 мин.
- •8.2.3Защита sql Server в Интернет — до 20 мин.
- •8.2.4Пример организации системы безопасности приложений — до 40 мин.
- •9.2.2Журнальное протоколирование в sql Server — до 20 мин.
- •9.2.3Контрольные точки — до 15 мин.
- •9.2.4Методы резервного копирования — до 25 мин.
- •10.2.2Слежение за резервным копированием — до 10 мин.
- •10.2.3Планирование резервного копирования — до 25 мин.
3.2.7Создание триггера instead of — до 10 мин.
Триггер INSTEAD OF позволяет вам управлять тем, что происходит, когда выполняются функции INSERT, UPDATE или DELETE. Триггер INSTEAD OF используется в первую очередь при модификации объединенного представления (union view). Обычно объединенные представления недоступны для модификации, поскольку SQL Server "не знает", какую базовую (underlying) таблицу или таблицы нужно модифицировать. Для обхода этой ситуации вы определяете по данному представлению триггер INSTEAD OF, позволяющий модифицировать базовые (underlying) таблицы. Рассмотрим один пример. Следующие операторы T-SQL создают представление под именем TitlesByAuthor со ссылкой на таблицы authors, titles и titleauthor.
CREATE VIEW TitlesByAuthor
AS
SELECT authors.au_id, authors.au_lname, titles.title
FROM authors
INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id
INNER JOIN titles ON titleauthor.title_id = titles.title_id
GO
Теперь после создания представления мы используем следующий набор T-SQL для вывода всех строк (они также показаны здесь), отвечающих критериям данного представления:
SELECT * FROM TitlesByAuthor
au_id au_lname title
————— ——————— —————————————————————
238-95-7766 Carson But Is It User Friendly?
724-80-9391 MacFeather Computer Phobic AND Non-Phobic Individuals:
756-30-7391 Karsen Computer Phobic AND Non-Phobic Individuals:
267-41-2394 O’Leary Cooking with Computers:
724-80-9391 MacFeather Cooking with Computers:
486-29-1786 Locksley Emotional Security: A New Algorithm
648-92-1872 Blotchet-Halls Fifty Years in Buckingham Palace Kitchens
899-46-2035 Ringer Is Anger the Enemy?
998-72-3567 Ringer Is Anger the Enemy?
998-72-3567 Ringer Life Without Fear
486-29-1786 Locksley Net Etiquette
807-91-6654 Panteley Onions, Leeks, and Garlic:
172-32-1176 White Prolonged Data Deprivation: Four Case Studies
427-17-2319 Dull Secrets of Silicon Valley
846-92-7186 Hunter Secrets of Silicon Valley
712-45-1867 del Castillo Silicon Valley Gastronomic Treats
274-80-9391 Straight Straight Talk About Computers
267-41-2394 O’Leary Sushi, Anyone?
472-27-2349 Gringlesby Sushi, Anyone?
672-71-3249 Yokomoto Sushi, Anyone?
213-46-8915 Green The Busy Executive’s Database Guide
409-56-7008 Bennet The Busy Executive’s Database Guide
722-51-5454 DeFrance The Gourmet Microwave
899-46-2035 Ringer The Gourmet Microwave
213-46-8915 Green You Can Combat Computer Stress!
(25 row(s) affected)
Если вы попытаетесь удалить из этого представления строку, в которой значение колонки au_lname равно Carson, то появится следующее сообщение:
Server: Msg 4405, Level 16, State 1, Line 1 View or function 'TitlesByAuthor' is not updatable because the FROM clause names multiple tables.
Представление или функция 'TitlesByAuthor' недоступна для модифицирования, поскольку предложение FROM ссылается names на несколько таблиц)
Чтобы обойти эту ситуацию, мы создадим для операции удаления триггер INSTEAD OF. Следующий набор операторов T-SQL создает триггер INSTEAD OF с именем Delete_It:
В следующем наборе операторов не происходит реального удаления строки из таблицы authors базы данных pubs. В целях данного примера здесь просто переименовывается строка.
CREATE TRIGGER Delete_It ON TitlesByAuthor INSTEAD OF DELETE
AS
PRINT 'Row from authors before deletion...'
SELECT au_id, au_lname, city, state
FROM authors
WHERE au_lname = 'Carson'
PRINT 'Deleting row from authors...'
UPDATE authors
SET au_lname = 'DELETED'
WHERE au_lname = 'Carson'
PRINT 'Verifying deletion...'
SELECT au_id, au_lname, city, state
FROM authors
WHERE au_lname = 'Carson'
GO
И если теперь мы введем операторы для удаления строки Carson из этого представления, то произойдет активизация триггера INSTEAD OF и мы получим следующие выходные результаты:
Row from authors before deletion...
au_id au_name city state
--------------------------------------------------------
238-95-7766 Carson Berkeley CA
(1 row(s) affected)
Deleting row from authors...
(1 row(s) affected)
Verifying deletion...:
au_id au_name city state
-----------------------------------------------------------
(0 row(s) affected)
