تریگر در Sql Server چیست ؟ کاربرد Trigger چیست ؟
کسی میتونه بگه تریگر در Sql Server چیست ؟ و کاربرد Trigger چی هست؟ لطفا اگر ممکنه مثال هم بزنید که دقیقا قابل درک باشه.
پاسخ هوش مصنوعی
تریگر (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 شامل رکوردهای جدید است.
تریگر در 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 هم پر میشه.
این مثال یکی از مثالهای ساده برای استفاده از تریگر می باشد.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- حذف کامل یک رکورد در جدول ریلیشن شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- تفاوت اوراکل و Sql Server چیست
- جابه جایی سطر و ستون در Sql Server
- استفاده از Stored Procedure در انتیتی فریم ورک code First
- آپدیت لیستی از رکوردها در Sql Server - آپدیت گروهی اطلاعات در Sql Server
- دلیل پرش 1000 تایی خودکار فیلد identity در Sql server
- مشکل نمایش ندادن Data Type موقع تایپ در Sql Server
- کار با تاریخ شمسی وساعت (استفاده از توابع )