КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Триггеры
END BEGIN Еnd Begin Else End Begin -- присвоение значений переменнным -- @class_id, @sub_class_id, @group_id, -- alphabetic_id @IerarhiID из -- значений ячеек в столбцах таблицы -- dbo.DISEASE_IERARHI select @class_id=DISEASE_CLASS_ID, @sub_class_id=DISEASE_SUBCLASS_ID, @group_id=DISEASE_GROUP_ID, @alphabetic_id=ALPHABIT_ID, @IerarhiID=ID from dbo.DISEASE_IERARHI where DISEASE_ID=@DiseaseID -- Сравнение значения столбца ID из таблицы -- dbo.DISEASE_IERARHI со значением из -- подзапроса and ID= ( select MIN(ID) from dbo.DISEASE_IERARHI i where i.DISEASE_ID=@DiseaseID ) -- Присвоение значений переменным из первой строки -- запроса. select top 1 @class_id=DISEASE_CLASS_ID, @sub_class_id=DISEASE_SUBCLASS_ID, @group_id=@DiseaseGroupID, @alphabetic_id=ALPHABIT_ID, @IerarhiID=ID, @DiseaseID=DISEASE_ID from dbo.DISEASE_IERARHI where DISEASE_GROUP_ID=@DiseaseGroupID and ID= ( select MIN(ID) from dbo.DISEASE_IERARHI i where i.DISEASE_GROUP_ID=@DiseaseGroupID ) В вышеупомянутом примере происходит присваивание значений переменным @class_id, @sub_class_id, @group_id, @alphabetic_id, @IerarhiID, @DiseaseID в зависимости от значений переменной @DiseaseID. Блоки кода begin..end служат для указания границ инструкции if...else.
Инструкция while применяется для многократного выполнения блока кода до тех пор, пока заданное условие истинно. Далее приведен пример.
DECLARE @var1 INT, @var2 VARCHAR(30) SET @var1 = 1 WHILE @var1 <= 10 -- присваивается переменной -- @var2 значение'Iteration #'+символьное значение -- переменной @var1 SET @var2 = 'Iteration #' + CAST(@var1 AS VARCHAR(2)) -- и печатается на экран значение переменной @var2 PRINT @var2 –- увеличивается значение переменной @var1 на 1 SET @var1 += 1
Важно! Одна из самых распространенных ошибок, которую вы можете допустить при написании блоков программного кода, использующих if или while, — забыть о том, что SQL Server выполняет только следующую инструкцию в соответствии с условием. Во избежание подобных ошибок настоятельно рекомендуется всегда применять конструкцию begin...end с инструкциями if или while, даже если вы намерены выполнить только одну строку кода, зависящую от условия. Это не только сделает код более понятным, но и поможет исключить ошибки при изменении программного кода в дальнейшем. Инструкция break применяется вместе с циклом while. Если необходимо прервать выполнение в теле цикла while, с помощью этой инструкции можно прервать повторное выполнение цикла. После выполнения инструкции break выполняется строка программного кода, следующая за циклом while. Инструкция continue применяется в цикле while для того, чтобы заставить код продолжить выполнение с первой строки цикла.
Инструкции break и continue почти никогда не применяются. Цикл while завершается, как только условие цикла while перестает быть истинным. Вместо встраивания в цикл дополнительной проверки вместе с инструкцией break обычно циклами while управляют с помощью подходящих условий циклов. Кроме того, цикл продолжает выполняться, пока условие while равно true. Следовательно, не возникает необходимости в применении инструкции continue. Инструкция waitfor позволяет сделать паузу в выполнении программного кода. У этой инструкции есть три варианта: waitfor delay, waitfor time и waitfor receive. Вариант waitfor receive используется в сочетании с Service Broker, изучение которого выходит за рамки данного курса. waitfor time прерывает выполнение программного кода до наступления заданного момента времени. Вариант waitfor delay приостанавливает выполнение на заданный промежуток времени.
DECLARE @var1 int DECLARE @var2 varchar (30) SET @var1 = 1 --Пауза на 2 секунды WAITFOR DELAY '00:00:02' WHILE @var1 <= 10 BEGIN SET @var2 = 'Iteration #' + CAST(@var1 AS VARCHAR(2)) PRINT @var2 SET @var1 += 1 End
Инструкция goto позволяет передать выполнение на метку, встроенную в процедуру. Применение конструкций, подобных goto, не одобряется во всех языках программирования.
После того как вы познакомились с конструкциями, управляющими ходом выполнения команд вы можете полноценно писать процедуры и функции. Но вы пока-что имеете достаточно поверхностное представление о триггерах. Триггер (trigger) — это специализированная программа Transact-SQL или среды CLR, которая автоматически выполняется при возникновении события в базе данных. SQL Server 2008 позволяет создавать два типа триггеров: DML(Data Management Language)-триггеры, которые выполняются при возникновении событий языка обработки данных (DML), и DDL(Data Definition Language)-триггеры, срабатывающие при выполнении инструкций языка определения данных (DDL). DML- триггеры выполняются при изменении данных в указанной таблице или представлении посредством инструкций INSERT, UPDATE или DELETE. DDL-триггеры, которые выполняются при возникновении на сервере таких DDL-событий, как создание, изменение или удаление объекта, используются для администрирования базы данных, например для аудита и управления доступом к объектам. В этой лекции вы научитесь создавать DML-триггеры AFTER(которые срабатывают после изменения данных в таблице) и INSTEAD OF(которые срабатывают вместо изменения данных в таблице), определять рекурсивные и вложенные триггеры, управлять ими и создавать DDL-триггеры для выполнения задач администрирования.
Дата добавления: 2014-01-04; Просмотров: 329; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |