بخشی از پاورپوینت

--- پاورپوینت شامل تصاویر میباشد ----

اسلاید 1 :

Trigger ها روالهایی هستند که پس از رخ دادن یک رویداد خاص به صورت خودکار اجرا می شوند .

انواع :

—DDL Trigger

هنگامی اجرا می شوند ، که رویدادی سبب ایجاد تغییر در ساختار بانک اطلاعاتی یا اشیا در بانک اطلاعاتی شود .

—DML Trigger

در هنگام رخ دادن دستورات DML ،(Insert , Update , Delete) روی جداول و Viewها اجرا می شوند .

اسلاید 2 :

—After Trigger

بعد از اجرای دستورات Insert ، Update و Delete روال مربوطه اجرا مي شود .

—Instead Of Trigger

به جای دستور Insert ، Update و Delete اجرا مي شود .

اسلاید 3 :

—اعمال محدودیت های جامعیتی در جایی که Constraint ها کارایی لازم را ندارند .

—درج رکوردها در جدول Log

—به هنگام سازی نسخه های مختلف داده

—اعمال قواعد پیچیده فعالیتهای محیط کاری

—اطلاع دادن به سایر برنامه هایی که تغییری در داده های جدول اتفاق افتاده است .

—و ...

اسلاید 4 :

—Create [OR Replace] Trigger Trigger_name
Before|After |nstead Of   Insert|Update|Delete
[OF column_name, column_name, …..]
ON
table_name
[FOR EACH ROW]
[WHEN condition ]
Begin
-- Statements here
End ;

مواردی که در SQL Server وجود ندارد با رنگ قرمز مشخص شده است. این موارد به شکل دیگری در SQL Server قابل پیاده سازی می باشد.

اسلاید 5 :

—UPDATE ( column )

از این تابع برای تست اینکه آیا یک ستون از جدول در دستور Insert یا Update آورده شده است یا خیر استفاده می شود .

نکته : این تابع مشخص نمی کند که آیا مقدار ستون واقعا تغییر کرده است یا خیر .

مثال در query زیر

UPDATE  customer SET City = City

مقدار با وجود اینکه مقدار City تغییر نکرده تابع Update(City) مقدار True را برمی گرداند . چون ستون City در دستور UPDATE ظاهر شده است .

اسلاید 6 :

—در صورتی که تنظیم مربوط به RECURSIVE_TRIGGERS  فعال باشد Trigger ها به صورت بازگشتی فراخوانی می شوند :

مثال

.1بر روی جدول T1 یک Update انجام می شود

.2Trigger با نام TR1 فعال می شود این Trigger یک Update بر روی جدول T2 انجام می دهد .

.3بر روی جدول T2 یک Trigger با نام TR2 وجود دارد که جدول T1 را Update می کند . در این حالت اجرای بازگشتی رخ داده است .

اسلاید 7 :

CREATE TRIGGER employee_insupd

ON employee

FOR INSERT, UPDATE

AS

DECLARE

@min_lvltinyint, @max_lvltinyint, @emp_lvltinyint, @job_idsmallint

SELECT

  @min_lvl = j.min_lvl,

  @max_lvl = j.max_lvl,

  @emp_lvl = i.job_lvl,

  @job_id = i.job_id

FROM employee e

INNER JOIN inserted i

  ON e.emp_id = i.emp_id

JOIN  jobs j

  ON j.job_id = i.job_id

IF NOT (@emp_lvl BETWEEN @min_lvl AND @max_lvl)

BEGIN

RAISERROR ('The level for job_id:%d should be between %d and %d.', 16, 1, @job_id, @min_lvl, @max_lvl)

ROLLBACK TRANSACTION

END

 

در متن اصلی پاورپوینت به هم ریختگی وجود ندارد. برای مطالعه بیشتر پاورپوینت آن را خریداری کنید