Студопедия

КАТЕГОРИИ:


Архитектура-(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-триггеры для выполнения задач администрирования.

 

<== предыдущая лекция | следующая лекция ==>
Конструкции, управляющие ходом выполнения команд | DML-триггеры
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 310; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.034 сек.