دسته بندی ها
18:48 1399/10/08

تریگر در Sql Server چیست ؟ کاربرد Trigger چیست ؟

مشخصات سوال کننده :
کاربر : pedram_khan     امتیاز کاربر : 277     رتبه کاربر : 6
دسته بندی : Sql Server

به این سوال امتیاز بدهید    1
تعداد بازدید این سوال : 22201
هوش مصنوعی

پاسخ هوش مصنوعی

تریگر (Trigger) در SQL Server یک نوع شیء است که به صورت خودکار و در پاسخ به یک رویداد خاص در پایگاه داده، مانند درج، بروزرسانی یا حذف رکوردها، اجرا می شود. تریگرها می توانند برای اجرای کدهای خاص قبل یا بعد از انجام این عملیات ها استفاده شوند.

کاربرد تریگرها شامل موارد زیر است:

  • حفظ یکپارچگی داده ها: برای اطمینان از این که داده های جدید با قوانین تجاری تناسب دارند، می توان از تریگرها استفاده کرد.
  • تاریخچه نگاری: با استفاده از تریگرها می توان تغییرات در داده ها را در جدولی جداگانه ثبت کرد.
  • اعمال قوانین پیچیده: تریگرها می توانند برای پیاده سازی منطق پیچیده ای که قابل پیاده سازی با قاعده های ساده نیست، مورد استفاده قرار گیرند.

مثال زیر نشان می دهد چگونه یک تریگر برای ثبت تاریخچه تغییرات در یک جدول ایجاد کنیم:


CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    Name NVARCHAR(100),
    Salary DECIMAL(18, 2)
);

CREATE TABLE SalaryHistory (
    EmployeeID INT,
    OldSalary DECIMAL(18, 2),
    NewSalary DECIMAL(18, 2),
    ChangeDate DATETIME DEFAULT GETDATE()
);

CREATE TRIGGER trg_SalaryUpdate
ON Employees
AFTER UPDATE
AS
BEGIN
    INSERT INTO SalaryHistory (EmployeeID, OldSalary, NewSalary)
    SELECT 
        d.EmployeeID,
        d.Salary,
        i.Salary
    FROM 
        deleted d
    INNER JOIN 
        inserted i ON d.EmployeeID = i.EmployeeID;
END;

در این مثال، هر بار که حقوق یک کارمند به روز رسانی می شود، تریگر trg_SalaryUpdate فعال می شود و تغییرات حقوق را در جدول SalaryHistory ثبت می کند. جدول deleted شامل رکوردهای قبلی و جدول inserted شامل رکوردهای جدید است.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 22:25 1399/10/08

تریگر در Sql Server چیست ؟

تریگر چیست

 

به طور خیلی ساده و خلاصه تریگرها یا Trigger قطعه ای از کدهای Sql می باشند که می توانند بعد از انجام یک عملیات و یا به جای یک عملیات اجرا شود و عملیات خاصی را انجام دهند. بنابراین به صورت کلی 2 نوع تریگر وجود دارد.

 

انواع Trigger ها در Sql Server به صورت کلی

به طور کلی دو نوع Trigger در Sql Server وجود دارد.

  • After Trigger : این نوع تریگر بعد از انجام یک عملیات اجرا می شود.
  • Instead Of Trigger : این نوع تریگر به جای یک عملیات انجام می شود.

تریگرها می توانند بعد یا به جای عملیات Delete، Update و یا Insert انجام شوند. پس می توان کل در مجموع 6 نوع تریگر وجود دارد.

  • After Insert : بعد از ذخیره یک رکورد در جدول اجرا می شود.
  • After Update : بعد از ویرایش اطلاعات یک رکورد اجرا می شود.
  • After Delete : بعد از حذف یک رکورد اجرا می شود.
  • Instead Of Insert : وقتی قصد داریم یک رکورد در دیتابیس ثبت شود به جای دستور Insert اجرا می شود.
  • Instead Of Delete : وقتی می خواهیم یک رکورد را حذف کنیم، به جای دستور Delete اجرا می شود.
  • Instead Of Update : وقتی قصد ویرایش یک رکورد را داریم، به جای دستور Update اجرا می شود.

 

چگونه در Sql Server یک Trigger ایجاد کنیم

اگر قصد دارید یک تریگر در Sql Server ایجاد کنید می توانید از طریق دستورات T-Sql زیر این کار را انجام دهید.

CREATE TRIGGER [schema_name.]trigger_name
  ON table_name
  AFTER  {[INSERT],[UPDATE],[DELETE]}
  [NOT FOR REPLICATION]
  AS
  {sql_statements}

در کد بالا در یک تریگر After ایجاد خواهد شد. ضمنا در جلوی واژه After باید نوع تریگر مشخص شود. (یکی از واژه های Insert یا Update یا Delete). در قسمت Sql_statement هم عملیاتی که قصد دارید بعد از Insert یا Update یا Delete انجام شود را قرار دهید.

 

کار با تریگر به صورت عملی در Sql Server

خب برای درک بهتر تریگر و آشنایی بهتر با کاربرد تریگرها در Sql Server یک مثال انجام می دهم. فرض کنید جدولی دارید که می خواهید تاریخ آخرین ویرایش هر رکورد را نگهداری کنید. یعنی به عبارتی هر موقع ردیفی را ویرایش کردیم در یک ستون ساعت و تاریخ ویرایش را ثبت کنیم.

 

ایجاد دیتابیس در Sql Server توسط دستورات T-Sql

در ابتدا یک دیتابیس خالی به نام myDataBase در Sql Server ایجاد می کنیم. برای این کار فقط کافیه Sql Server رو باز کنید و دستور زیر را اجرا کنید.

Create DataBase MyDataBase

 

ایجاد جدول در Sql Server توسط دستورات T-Sql

خب حالا یک جدول با فیلدهای زیر ایجاد می کنیم.

Create Table MyTable
(Id int Identity(1,1) primary key not null,FirstName varchar(50), Family varchar(150), ModifyDateTime DateTime Null)

همونطوری که می بینید این جدول دارای فیلدهای زیر می باشد.

  • فیلد Id که به صورت Identity تعریف شده. یعنی هر رکوردی که ثبت میشه اتوماتیک 1 واحد مقدارش افزایش پیدا می کنه و به عنوان کلید اصلی جدول هم تعیین شده.
  • فیلد FirstName که از نوع varchar می باشد.
  • فیلد Family که این فیلد هم از نوع varchar می باشد.
  • فیلد ModifyDateTime که از این فیلد هم شما می توانید برای ثبت زمان ویرایش رکورد استفاده کنید. این فیلد هم از نوع DateTime می باشد و مشخص کرده ایم که قابلیت null بودن هم داشته باشد.

 

ذخیره اطلاعات در جدول در Sql Server توسط دستورات T-Sql

خب حالا یک رکورد را در جدول MyTable ثبت می کنیم. با استفاده از دستور Insert این کار انجام می شود.

Insert Into MyTable (FirstName,Family) Values ('Ali','Yaraghy')

خب تا اینجای کار یک رکورد در جدول خود داریم. حال می خواهیم تریگری ایجاد کنیم که هر موقع هر ردیفی در این جدول ویرایش شد تاریخ و ساعت ویرایش در فیلد ModifyDateTime ذخیره شود. با استفاده از دستورات زیر یک تریگر روی جدول MyTable ایجاد می کنیم.

Create Trigger [dbo].[Trg_Update] On [dbo].[myTable]
 After Update
 As Begin
Update myTable Set ModifyDateTime = GETDATE()
Where myTable.id = (Select d.id from deleted d)
End

 

در دستورات بالا یک تریگر After Update ایجاد کردیم. یعنی هر وقت ویرایشی صورت بگیرد بعد از اتمام عملیات ویرایش دستورات تریگر اجرا می شود. و در بدنه تریگر هم فیلد ModifyDateTime را با تاریخ و ساعت روز مقدار دهی کردیم.

نکته : جدول deleted یک جدول Temp می باشد که به صورت پیش فرض در همه دیتابیس ها وجود دارد.

خب حالا اگر ویرایشی روی رکوردهای خودتون انجام بدید می بینید که مقدار ModifyDateTime هم پر میشه.

این مثال یکی از مثالهای ساده برای استفاده از تریگر می باشد.

ویرایش شده در دوشنبه 8 دی 1399 ساعت 22:26:07
به این پاسخ امتیاز بدهید    2
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود