এস কিউ এল সার্ভার ২০০৮ শিখুন ধাপে ধাপে [পর্ব-১৪] :: ট্রিগার

SQL সার্ভার ২০০৮ শিখুন ধাপে ধাপে

সুপ্রিয় বন্ধুরা,
কেমন আছেন সবাই? আশা করি ভালো আছেন; কিছুদিন আপনাদের কাছ থেকে দূরে ছিলাম বলে ক্ষমা চেয়ে নিচ্ছি। আসলে আমার শরীরটা তেমন ভালো ছিল না। এখন মোটা মুটি ভাল তাই আপনাদের সামনে হাজির হলাম। তো কেমন চলছে আপনাদের প্র্যাকটিস ? নিশ্চয়ই ভাল? প্র্যাকটিস এর কোন বিকল্প নেই। এই কথাটা মনে রাখবেন সবসময়। অনেক কথা হল, নতুন বর্ষের আগাম শুভেচ্ছা জানিয়ে শুরু করছি আজকের টিউন। আজ আমি আপনাদের সামনে যে বিষয় নিয়ে আলোচনা করবো তার নাম ট্রিগার ।
ট্রিগার কি?
ট্রিগার হল বিশেষ ধরনের স্টোর প্রসিডিউর যা নির্দিষ্ট কোন অপারেশনে অটোমেটিক প্রসেস চালায়।
ট্রিগার এর ধরনঃ
ট্রিগার প্রধানত দুই ধরনের হয়ে থাকে।
1. After trigger
2. Instead of Trigger
1. After Trigger: এই ট্রিগার run করে কোন টেবিল এর insert, update, delete এর পর। এই ট্রিগার কে আবার ৩ ভাগে ভাগ করা হয়েছে। আমরা প্রতিটি ভাগ উদাহরনের সাথে দেখবো। আপনাদের মনোযোগ আকর্ষণ করছি, আশা করি উপভোগ করবেনঃ
1. After Insert Trigger: চলুন প্রথেম একটি টেবিল তৈরি করি। এবং তাতে কিছু ডাটা insert করি।

CREATE TABLE EmpInfo
(
eid int primary key identity not null,
ename varchar(30),
eSalary money
)

INSERT INTO EmpInfo VALUES ('Shafiq',1000);
INSERT INTO EmpInfo VALUES ('Rafiq',1200);
INSERT INTO EmpInfo VALUES ('Sumon',1100);
INSERT INTO EmpInfo VALUES ('Belal',1300);
INSERT INTO EmpInfo VALUES ('Hiron',1400);

এবার আরেকটা টেবিল তৈরি করুনঃ


CREATE TABLE Emp_Audit
(
Emp_ID int,
Emp_name varchar(100),
Emp_Sal decimal (10,2),
Audit_Action varchar(100),
Audit_Timestamp datetime
)
Go

এই টেবিল টিতে কোন ডাটা Insert করার প্রয়োজন নেই।
এবার ট্রিগার তৈরি করুন নিচের মত করেঃ


CREATE TRIGGER trgAfterInsert
ON EmpInfo
FOR INSERT
AS
declare @empid int;
declare @empname varchar(100);
declare @empsal decimal(10,2);
declare @audit_action varchar(100);

select @empid=i.eid from inserted i;
select @empname=i.ename from inserted i;
select @empsal=i.eSalary from inserted i;
set @audit_action='Inserted Record -- After Insert Trigger.';

insert into Emp_Audit
(Emp_ID,Emp_Name,Emp_Sal,Audit_Action,Audit_Timestamp)
values(@empid,@empname,@empsal,@audit_action,getdate());

PRINT 'AFTER INSERT trigger fired.'
GO

এখন আপনি প্রথমে যে টেবিল টি তৈরি করেছিলেন তাতে ডাটা Insert করুন।


insert into EmpInfo values('kumkum',1500);

কোড টি খেয়াল করুন, এখানে কোন আইডি দিইনি। তার কারন টেবিল তৈরি করার সময় eid এর পাশে Identity এই শব্দটি ব্যবহার করেছি, এই শব্দের অর্থ হল আপনাকে আইডি দিতে হবে না এস কিউ এল সার্ভার অটো একটি আইডি আপনার ডাটার জন্য দিয়ে দিবে, যাই হোক আমাদের প্রথম টেবিল এ ডাটা insert হয়ে গেল। এবার পরে আপনি যে টেবিল টি তৈরি করেছিলেন সেটির ভেলু দেখার জন্য সিলেক্ট কোয়ারি লিখুনঃ

select * from Emp_Audit

কি? কি বুঝলেন? আপনি তো emp_Audit এই টেবিল এ ডাটা Insert করেন নি, করেছিলেন EmpInfo টেবিল এ। তাহলে? আসলে ট্রিগার এর কাজ হচ্ছে এটাই। আপনি যে কোন একটি কাজ করবেন পাশাপাশি অটোমেটিক অন্য একটি কাজ হয়ে যাবে। এটাই ট্রিগার এর ধর্ম। আপনি EmpInfo টেবিল এ ডাটা Insert করছেন পাশাপাশি আপনি চাচ্ছেন যে আপনি যেই insert operation টি করলেন তার একটি লগ রাখবেন অন্য একটি টেবিল এ কিন্তু এ জন্য আপনি আলাদা insert query লিখবেন না, তাহলে বস আপনার জন্য WAIT করছে ট্রিগার। কি বোঝা গেল?

এবার চলুন আমরা যে ট্রিগার টি লিখলাম তাকে একটু পোষ্ট মর্টেম করে দেখি ভিতরে কি আছে? কিভাবে কাজ করছে এটি।

আগামী পর্বে আবার দেখা হবে বাকি টিউন নিয়ে, সে পর্যন্ত ভাল থাকুন বন্ধুরা; বুঝতে কোথাও সমস্যা হলে জানাবেন। আল্লাহ হাফেজ।

Level 2

আমি Shafiq। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 13 বছর যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 18 টি টিউন ও 44 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 1 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস