-
اموزش:ایجاد تریگرها و مثالهای مختلف
سلام دوستان قصدم از زدن این تاپیک این بود که هم خودم وهم شما یه سری مطلب(که با کمک شما دوستان باید تکمیل بشه بود) پس همه با هم شروع میکنیم
تریگر چیست؟؟؟؟؟؟؟؟؟؟؟
تریگر در واقع مثل یه رویداد میمونه که برای یک جدول مینویسیم که اگر یکی از اعمال Delete یا Insert یا update روی جدول مورد نظر اتفاق افتاد ،این رویداد اجرا بشه.
مثلا برای یک جدول یک تریگر مینویسید که اگر عمل insert روی جدول اتفاق افتاد تعداد رکوردها رو برگردونه و یا ...
به طور پیش فرض کلیه تریگرهای جدول پس از تغییرات جدول فعال میشوند این تریگرها AFTER نام دارند
تریگرهای دیگری نیز وجود دارند که INSTED OF نامیده میشوند و به جای تغییر در دادههای مورد نظر این تریگر فعال میشود
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
برای ایجاد تریگر 2 راه وجود داره 1: از طریق کدنویسی در اس کیوال سرور
2:از طریق خود نرم افزار اس کیوال سرور
که ما قصد داریم روش اول یعنی کد نویسی رو با هم کار کنیم
برای ساخت تریگر از دستور CREATE TRIGGER
استفاده میشود
برای اولین مثال ما میخواهیم تریگری بر روی یک جدول ایجاد کنیم که در هنگام حذف اطلاعات از یه جدول به نام NBH این تریگر فعال شود
CREATE TRIGGER BENYAMIN
ON NBH
FOR DELETE AS
RAISERRORPRINT'DELETE'
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
این هم یه تریگر دیگه واسه شما دوستان عزیز و گرامی فقط شما هم همکاری کنید و مطلبی یا مثالی در این مورد جور کنید و در این تاپیک بگذارین به هر حال هم بدرد من میخوره و هم به درد شما به خدا من هم مثل خیلیها تازه کارم ????????????????????????????
این تریگر بعد از اضافه شدن رکورد در جدول فعال میشود
CREATE TRIGGER BEB
ON ABC
FOR INSERT
AS
PRINT 'ECORD INSERT'
حال پس از اجرای دستورات این دستور را اجرا کنید
INSERT INTO ABCVALUES('BENYAMIN')
در این مثال از جدولی به نام ABC استفاده شده که یک فیلد نام فقط دارد
دوستان شما هم کمک کنید دیگه
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
تریگرهای INSTAED OF : هنگام استفاده از این نوع تریگرها 'به جای دستورات کاربر دستورات تریگر اجرا میشوند به عنوان مثال فرض کنید تریگری برای یکی از جداولتان مینویسید تا به کار بر اطلاع دهد که نمیتواند در این جدولی رکوردی را حذف یا مثلا اضافه کند و.. این کار با استفاده از تریگر INSTEAD OF قابل اجرا است
حال بریم یه مثالی بزنیم :
CREATETRIGGER RT
ON ABC
INSTEAD OF DELETE AS
PRINT'CAN NOT DELETE '
حال بیایید و این دستور رو اجرا کنید مشاهده خواهید کرد که اون رکورد مورد نظر حذف نمیشود دوستان من خودم هم دارم تمرین میکنم و نتیجه کار رو برای شما مینویسم این یعنی که این مثالها درست هستن
DELETEFROM ABC
WHERE PID='22'
دوستان عزیز خواهشا شما هم یه لطفی کنید و مثالی مطلبی رو در مورد این مبحث اینجا بگذارید
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
سلام با با شما بروبچه ها خیلی با حالید من این همه التماس کردم شما هم یه نیمچه شرکتی کنید والا به خدا ضرر نمیکنید بگذریم بازم اومدم تا یه مثال دیگه براتون بزنم
فرض کنید بخواهیم در جدولی که مخصوص دانشجویان است تریگری بنویسیم که پس از (دقت کنید پس از ) اضافه کردن رکوردی تعداد دانشجویان را بر گرداند
CREATE TRIGGER TGST
ON STUDENT
AFFTER INSERT
AS
SELECT COUNT (STDNO) FROM STUDENT
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
اگر این تریگر را روی database بنویسید دیگه نمیشه تغییراتی داخل database انجام داد
CREATE TRIGGER TRIGGER_DROPTABLE
ON DATABASE
FOR DROP_TABLE,CREATE_TABLE,ALTER_TABLE,CREATE_PROCEDU RE, ALTER_PROCEDURE, DROP_PROCEDURE,DROP_TRIGGER,CREATE_TRIGGER,ALTER_T RIGGER,DROP_VIEW,CREATE_VIEW,ALTER_VIEW
AS
PRINT 'شما نمی توانید تغييراتي در پایگاه ايجاد کنيد'
ROLLBACK
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
نقل قول:
نوشته شده توسط
oliya24
سلام با با شما بروبچه ها خیلی با حالید من این همه التماس کردم شما هم یه نیمچه شرکتی کنید والا به خدا ضرر نمیکنید بگذریم بازم اومدم تا یه مثال دیگه براتون بزنم
فرض کنید بخواهیم در جدولی که مخصوص دانشجویان است تریگری بنویسیم که پس از (دقت کنید پس از ) اضافه کردن رکوردی تعداد دانشجویان را بر گرداند
CREATE TRIGGER TGST
ON STUDENT
AFFTER INSERT
AS
SELECT COUNT (STDNO) FROM STUDENT
با توجه به گفته شما میخوام ببینم مقدار بازگشتی این trigger را می توان داخل برنامه استفاده کرد یعنی مثلا داخل یک متغیر داخل برنامه ریخت
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
ددستور rollback چه کاری رو انجام میده لطفا توضیح دهید
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
یعنی هر عملی که انجام دادیم CREATE,Dropو... را لغو میکند
مثل کد زیر که مانع update,delete در جدول می شود
create trigger MyTrigger
on table1
WITH ENCRYPTION
instead of update,delete
as
begin
Print 'این جدول غیر قابل تغییر است'
ROLLBACK
end
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
با تشکر از دوست عزیز مان که ما را در مطالب این تاپیک کمک میکنه من تازه در book online بودم و به دو مورد به نامهای فعال کردن وغیر فعال کردن تریگرها برخورد کردم :خودمونیم شاید یه وقتی نخواستیم برای یک لحظه از تریگر بکار برده شده استفاده کنیم پس دستور
غیر فعال کردن تریگر را بدین شکل مینویسیم من بر روی جدولی به نام bv تست کردم و درست هم بود پس بریم :
disable trigger my_trigger
on bv
go
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
و برای فعال کردن تریگر مربوطه از فرمان زیر در همان جدول مربوطه استفاده میکنیم بدین نحو که:
enable trigger my_trigger on bv
go
دوستان یک نفر به جمع ما اضافه شده و ما رو همیاری میکنه پس لطفا شما هم ما رو در این تاپیک همراهی کنید به خدا جالب تر از این هم میشه
با تشکر
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
نقل قول:
نوشته شده توسط
karimi.ali2005
یعنی هر عملی که انجام دادیم CREATE,Dropو... را لغو میکند
مثل کد زیر که مانع update,delete در جدول می شود
create trigger MyTrigger
on table1
WITH ENCRYPTION
instead of update,delete
as
begin
Print 'این جدول غیر قابل تغییر است'
ROLLBACK
end
نکته ای که دراین تریگر فراموش کردم بگم استفاده از WITH ENCRYPTION که سبب میشه کد تریگر غیر قابل دسترس باشه
یک سوال :آیا روشی وجود داره که بتوان کد را برگرداند؟؟؟:متفکر:
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
بار دیگر برای یاد اوری خودم هم که شده باشه تاکیید میکنم که تریگر instead of به جای دستورات کاربر استفاده میشود مثلا فرض کنید که شما تریگری مینویسید که از حذف رکورد در جدول شما جلوگیری کند و یه پیغامی رو به کاربر نشان دهد خوب حالا اون رو اجرا میکنید و کاربر میاد و یه رکورد رو میخواد حذف کنه که ناگهان با اون پیامی که در تریگر نوشتید مواجه میشه پس نتیجه میگیریم که این نوع تریگر به جای دستوررات کاربر اجرا میشود دوباره مثالی ذکر میکنم :
create trigger my_trigger
on bv
instead of delete as
print ('can not delete recods from bv table')
حال پس از اجرای این دستورات بیایید و این دستورات رو اجرا کنید
delete from bv
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
فعال کردن وغیر فعال کردن تریگرهای یک جدول
فعال کردن
ALTER TABLE name_table Enable TRIGGER all
غیر فعال
ALTER TABLE name_table Disable TRIGGER all
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
اگر این دستورات رو اجرا کنید پیغامی چاپ میشه که شما نمیتوانید این کار رو انجام بدید حالا ما میخواهیم دستور تغییر تریگر ایجاد شده رو هم در این تاپیک شرح بدیم دوستان مثال بالا رو طوری تغیر میدهیم که به راحتی اب خوردن بتوانید رکورد های جدول مورد نظر تان رو حذف کنید پس :
alter trigger my_trigger
on bv
for delete as
print ('%d delete records')
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
دوستان برای حذف تریگر از دستور drop trigger استفاده کنید بدین نحو
drop trigger my _ trigger
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
و اما برای مشاهده تمام تریگر هایی که تا به حال نوشته اید از این رویه ذخیره شده استفاده کنید
sp_helptrigger 'bv'
با اجرای این دستور لیست تریگرهای مربوط به جدول BV را مشاهده میکنید
دوستان بیایید و به جمع ما بپیوندین
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
سلام دوستان گرامی
من 2 تا جدول دارم یکی به نام kar با فیلد های IDP,Na,Fa,Te,Ad و جدول دوم به نام Mos با فیلد های ID,IDP,Na,Fa
میخوام وقتی کاربر تغییراتی در جدول kar ایجاد میکنه مثلاً مقدار Na رو عوض میکنه به طبع این مقدار Na
Na در جدول 2 هم اعمال بشه
نمیدونم ولی فکر کنم باید Trigger بنویسم
اگه باید تریگر بنویسم ممنون میشم کمکم کنید.
من از VS 2010 و بانک اطلاعاتی SQL خود VS استفاده میکنم و از طریق DataSet به برنامه ارتباط دارم.
ممنونم
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
سه حالت برای جدول اتفاق می افتد(insert,update,delete)
درضمن ما دوتا جدول داریم که رکورهایی که حذف میشوند(deleted)ورکوردهایی که اضافه میشوند(inserted) در آن ها نگه داری میشوند
createtrigger t1
on kar
After update
as
begin
declare @d int
select @d=Na from deleted
declare @i int
select @i=Na from inserted
if(@i is not null)and(@d is not null)
begin
-- update
end
end
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
دوست گرامی کدها رو کپی وپیست نکن که این طور بشن این پست را ویرایش کن و کدها رو بنویس
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
و یک trigger جالب دیگه که ip و user و ... را برمی گرداند
CREATE DATABASE AuditDB;
GO
USE AuditDB;
GO
CREATE TABLE dbo.DDLEvents
(
EventDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
EventType NVARCHAR(64),
EventDDL NVARCHAR(MAX),
EventXML XML,
DatabaseName NVARCHAR(255),
SchemaName NVARCHAR(255),
ObjectName NVARCHAR(255),
HostName VARCHAR(64),
IPAddress VARCHAR(32),
ProgramName NVARCHAR(255),
LoginName NVARCHAR(255)
);
USE YourDatabase;
GO
CREATE TRIGGER DDLTriggerName
ON DATABASE
FOR CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@EventData XML = EVENTDATA();
DECLARE
@ip VARCHAR(32) =
(
SELECT client_net_address
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
);
INSERT AuditDB.dbo.DDLEvents
(
EventType,
EventDDL,
EventXML,
DatabaseName,
SchemaName,
ObjectName,
HostName,
IPAddress,
ProgramName,
LoginName
)
SELECT
@EventData.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(100)'),
@EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'NVARCHAR(MAX)'),
@EventData,
DB_NAME(),
@EventData.value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(255)'),
@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)'),
HOST_NAME(),
@ip,
PROGRAM_NAME(),
SUSER_SNAME();
END
GO
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
با سلام و تشکر
من تو جدولم یک فیلد به نام Allow_Delete دارم میخوام اگه مقدارش False بود اجازه ی حذف داد نشه وگرنه بتونه حذف کنه
ممنون میشم کمکم کنید.
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
برای مشاهده کدهای تریگر
sp_helptext @objname = 'trigger name'
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
یه نکته بگم برا دوستانی که از html سر در نمیارن برخی مثال ها به صورت کد html ذخیره شدن و قابل فهم نیست.
برای مشههده اونارو توی یه notepad ذخیره کنید و قبل از هر نوشته ای این کد را وارد کنید <html> و در پایان و اخر همه ی کد ها هم <html/> را وارد کنید . اونو با پسوند html ذخیره کنید و بعد با یه مرورگر باز کنید تا مثال را ببینید!
-
نقل قول: اموزش:ایجاد تریگرها و مثالهای مختلف
با سلام و خسته نباشید
برای من خیلی مفید بود دست شما درد نکنه جناب آقای oliya24