خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
استفاده از After Trigger در SQL Server
After Trigger در SQL Server نوع خاصی از تریگر است که SQL Server پس از اتمام اجرای عملیاتی که آن را اجرا می کند، فعال می شود. در ادامه با ذکر مثال های ساده ای، با طرز کار و نحوه استفاده از این نوع تریگر آشنا خواهید شد.
Syntax ایجاد After Trigger به صورت زیر می باشد:
در اسکریپت زیر از After trigger برای پیگیری و ردیابی رکوردها هنگام رخ دادن یک دستور خاص مانند insert، update، Delete در جدول employee استفاده می کند.
خب، تریگر مورد نظر را ایجاد کردیم و حالا به سراغ تست آن می رویم.
حالا تریگر مربوطه را با اضافه کردن رکورد جدید به جدول employees چک می کنیم.
همانطور که مشاهده می کنید، پس از افزودن یک رکورد جدید به جدول employee، یک after trigger به محض اجرای دستور Insert فعال شده و یک رکورد مانند همان رکوردهایی که در insert بوده را به جدول emplpyee_track بوده اضافه کرد.
حالا تریگری که ایجاد کردیم را برای دستور delete چک می کنیم.
همانطور که مشاهده می کنید، زمانی که رکورد مربوطه از جدول employee حذف شد یک تریگر After پس از اجرای فرمان Delete اجرا شده و یک رکورد جدید با عنوان Delete به emplpyee_track اضافه می کند.
حالا همین تریگر را در مورد ویرایش رکورد بررسی می کنیم. برای این منظور باید در مورد ویرایش هم اصلاحاتی در تریگر مربوطه انجام دهیم چون برای Update، اسکریپتی در تریگر ایجاد نکرده بودیم.
حالا تریگر فوق را در زمان آپدیت رکورد از جدول employee بررسی می کنیم.
همانطور که مشاهده می کنید ، هنگامی که رکورد در جدول emplpyee آپدیت می شود، مانند مواردی که تا به الان مشاهده کردید، رکورد جدیدی را در خصوص این ویرایش به emplpyee_track اضافه می کند.
Syntax ایجاد After Trigger به صورت زیر می باشد:
CREATE TRIGGER triggername
ON { tablename }
AFTER {[INSERT] [,] [UPDATE] [,] [DELETE] }
AS
{ ---sqlstatements }
در اسکریپت زیر از After trigger برای پیگیری و ردیابی رکوردها هنگام رخ دادن یک دستور خاص مانند insert، update، Delete در جدول employee استفاده می کند.
CREATE TRIGGER trg_Employees_track
ON Employees
AFTER INSERT ,DELETE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO emplpyee_track( EmpId, LastName, FirstName, city, record_status, Date
)
SELECT i.EmployeeId, LastName, FirstName, city, 'inserted' as reocrd_status , GETDATE()
FROM
inserted i
UNION ALL
SELECT d.EmployeeId, LastName, FirstName, city, 'deleted' as reocrd_status , GETDATE()
FROM
deleted d;
END
خب، تریگر مورد نظر را ایجاد کردیم و حالا به سراغ تست آن می رویم.
حالا تریگر مربوطه را با اضافه کردن رکورد جدید به جدول employees چک می کنیم.
Insert into Employees ( LastName, FirstName, city) values
('Anthony' ,'Mark','Denmark')
select EmployeeId, LastName, FirstName, city from Employees
Select * from emplpyee_track
همانطور که مشاهده می کنید، پس از افزودن یک رکورد جدید به جدول employee، یک after trigger به محض اجرای دستور Insert فعال شده و یک رکورد مانند همان رکوردهایی که در insert بوده را به جدول emplpyee_track بوده اضافه کرد.
حالا تریگری که ایجاد کردیم را برای دستور delete چک می کنیم.
delete from Employees where EmployeeID =1011
select EmployeeId, LastName, FirstName, city from Employees
Select * from emplpyee_track
همانطور که مشاهده می کنید، زمانی که رکورد مربوطه از جدول employee حذف شد یک تریگر After پس از اجرای فرمان Delete اجرا شده و یک رکورد جدید با عنوان Delete به emplpyee_track اضافه می کند.
حالا همین تریگر را در مورد ویرایش رکورد بررسی می کنیم. برای این منظور باید در مورد ویرایش هم اصلاحاتی در تریگر مربوطه انجام دهیم چون برای Update، اسکریپتی در تریگر ایجاد نکرده بودیم.
ALTER TRIGGER trg_Employees_track
ON Employees AFTER INSERT,UPDATE ,DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @deletedcnt INT ,@insertedcnt INT
SELECT @deletedcnt = COUNT(1) FROM deleted
SELECT @insertedcnt = COUNT(1) FROM inserted
IF(@deletedcnt & @insertedcnt > 0)
BEGIN
INSERT INTO emplpyee_track( EmpId, LastName, FirstName, city, record_status, Date )
SELECT i.EmployeeId, LastName, FirstName, city, 'updated' as reocrd_status, GETDATE()
FROM inserted i
END
ELSE IF (@deletedcnt >0)
BEGIN
INSERT INTO emplpyee_track( EmpId, LastName, FirstName, city, record_status, Date
)
SELECT d.EmployeeId, LastName, FirstName, city,'deleted' as reocrd_status, GETDATE()
FROM deleted d;
END
ELSE
BEGIN
INSERT INTO emplpyee_track( EmpId, LastName, FirstName, city, record_status, Date )
SELECT i.EmployeeId, LastName, FirstName, city, 'inserted' as reocrd_status, GETDATE()
FROM inserted i
END
END
حالا تریگر فوق را در زمان آپدیت رکورد از جدول employee بررسی می کنیم.
Update employees set lastName ='Anthony S' where EmployeeId =8
select EmployeeId, LastName, FirstName, city from Employees
Select * from emplpyee_track
همانطور که مشاهده می کنید ، هنگامی که رکورد در جدول emplpyee آپدیت می شود، مانند مواردی که تا به الان مشاهده کردید، رکورد جدیدی را در خصوص این ویرایش به emplpyee_track اضافه می کند.
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: