Изявление CREATE
Платформата SQL Server поддържа ядрото ANSI с добавяне на тип тригери INSTEAD OF и проверка на промяна на колони. Тази платформа не поддържа клаузите REFERENCING и WHEN. Синтаксисът е даден по-долу.
TRIGGER trigger_name ON table_name [С ШИФРОВАНЕ]
[НЕ ЗА РЕПЛИКАЦИЯ]
[АКО АКТУАЛИЗИРАНЕ(колона) [ ROATE(колона)] […]] кодов блок
(CREATE ALTER) TRIGGER trigger_name
Създайте нов тригер с име trigger_name или модифицирайте съществуващ тригер trigger_name чрез добавяне или модифициране на свойства на тригер или кодов блок. Когато модифицирате съществуващ тригер, разрешенията и зависимостите на съществуващия тригер се запазват.
НА table_name
Декларира се таблицата или изгледът, от който зависи тригерът. Изгледите може да имат дефинирани тригери INSTEAD OF, стига изгледите да могат да се актуализират и не съдържат клауза WITH CHECK.
С ШИФРОВАНЕ
ЗА СЛЕД ВМЕСТО
Указва кога трябва да се стартира тригерът. (Ключовите думи FOR и AFTER са синоними.) Клаузата AFTER показва, че тригерът се задейства само след като операцията за модифициране на данни (и други каскадни действия и проверки на ограничения) е извършена успешно. Тригерът INSTEAD OF е подобен на стандартния тригер ANSI BEFORE, тъй като кодът на тригера може напълно да замени операцията за промяна на данните. Това задейства тригера вместо операцията за модификация, която е задействала тригера. Тригери от тип INSTEAD OF DELETE не могат да се използват, ако изтриването причинява каскадни действия. Само тригерите INSTEAD OF имат достъп до колони TEXT, NTEXT или IMAGE.
С ПРИЛОЖЕНИЕ
Към таблицата или изгледа се добавя допълнителен тригер от съществуващ тип. Поддръжката на тази клауза е предоставена за обратна съвместимост с по-ранни версии на продукта и тази клауза може да се използва само с тригери FOR.
НЕ ЗА РЕПЛИКАЦИЯ
Предотвратява задействането на тригер при операция за модифициране на данни, инициирана от SQL Server Embedded Replication.
Позволява ви да изберете конкретната колона, която задейства тригера. Тригерите, специфични за колони, се задействат само при операции UPDATE и INSERT, но не и при операции DELETE. Ако операция UPDATE или INSERT се приложи към колона, която не е в списъка, тригерът не се задейства.
Платформата на SQL Server позволява множество задействания за една операция за манипулиране на таблица или изглед. По този начин е възможно да се използват три тригера UPDATE наведнъж в една таблица. Можете да използвате няколко тригера AFTER на таблица. Редът, в който се изпълняват, е недефиниран, но първият и последният тригери могат да бъдат посочени изрично с помощта на системната съхранена процедура spsettriggerorder. На таблица е разрешен само един тригер INSTEAD OF за оператор INSERT, UPDATE или DELETE.
В SQL Server можете да дефинирате произволна комбинация от тригери в един оператор за тригер, като ги разделяте със запетаи. (Това изпълнява един и същ код за всяка инструкция в дефиницията на комбинацията.)
Платформата SQL Server имплицитно използва формуляра ANSI FOR EACH STATEMENT за тригери.
Когато се задейства тригер, SQL Server записва стойности в две важни псевдотаблици: изтрити и вмъкнати. Те са съответно еквивалентни на псевдотаблиците преди и след, описани по-рано в раздела Общи правила,свързани със стандарта ANSI. Тези таблици са идентични по структура с таблицата, в която е създаден тригерът, с изключение на това, че съдържат старите данни преди операцията за промяна (изтрити) и новите стойности, които са в таблицата след тази операция (вмъкнати).
Клаузата ASIF UPDATE (колона) проверява за операция INSERT или UPDATE на тази колона или колони; това изречение е аналогично на конструкцията на ANSI с /PSH(колона). Можете да посочите няколко колони, като добавите отделни клаузи (UROL колона). Ако следвате клаузата (колона) AS IF UPDATE с BEGIN…END Transact-SQL блок код, можете да изпълните множество Transact-SQL операции в тригер. Тази клауза е функционално еквивалентна на оператора IF ... THEN ... ELSE.
В допълнение към намесата в изпълнението на операции за модифициране на данни, показани в примера на ANSI SQL, платформата SQL Server позволява извършването на други видове операции в операция за модифициране на данни. В следващия пример решихме, че таблицата sales_archive_2002 вече не се използва и всеки, който се опита да вмъкне данни в нея, ще бъде уведомен за това ограничение.
Платформата на SQL Server не позволява следните изрази в кодовия блок на Transact-SQL на тригера: ALTER, CREATE, DROP, DENY, GRANT, REVOKE, LOAD, RESTORE, RECONFIGURE и TRUNCATE. Освен това инструкциите DISK и командата UPDA TE STA TISTICS не са разрешени.
Платформата SQL Server ви позволява да изпълнявате рекурсивни тригери, като използвате параметъра за рекурсивни тригери на системната съхранена процедура sp_dboption. Рекурсивните тригери се задействат сами в резултат на тяхното изпълнение. Например, ако тригер INSERT на таблица T1 изпълнява операция INSERT на таблица T1, той може да извърши рекурсивна операция. Тъй каторекурсивните тригери могат да бъдат опасни, те са деактивирани по подразбиране.
SQL Server също ви позволява да използвате вложени тригери, до 32 нива на влагане. Ако някой от вложените тригери извърши операция ROLLBACK, следващите тригери не се задействат. Пример за вложени тригери: Тригер на таблица T1 стартира операция върху таблица T2, която също има тригер, който стартира операция върху таблица T3. Тригерите се отменят, ако се формира безкраен цикъл. Вложените тригери могат да бъдат активирани с помощта на параметъра за вложени тригери на съхранената процедура sp_configure. Ако вложените тригери са деактивирани, тогава рекурсивните тригери също са деактивирани, независимо от съответната настройка в съхранената процедура sp_dboption.
Обърнете внимание, че изразите CREATE на SQL Server позволяват отложено разрешаване на имена. Това означава, че командата се обработва дори ако се отнася до обект на база данни, който все още не съществува.
Допълнителна информация по темата
Начини и методи за използване на оператора CREATE/ALTER VIEW в бази данни на платформата SQL Server