# پایگاه‌های داده > SQL Server > T-SQL >  ایجاد یک تریگر(trigger)

## am_sanatiz

با سلام
من در یک بانک اطلاعاتی در sql server 2000 جداولی دارم ،
 در یک جدول که ورود کالاها را دارد می خواهم تا کالایی وارد این جدول شد ، تریگری اجرا گردد وبه جدولی که موجودی این کالا در انبار را مشخص می کند ، مقدار جدید وارد شده برای کالا را بروزرسانی کند.

جدول ورود کالاها به نام vorod دارای فیلد های aid کدانبار ، cid کدکالا ، qty مقدار کالا می باشد.
جدول موجودی انبارها به نام mojodi دارای فیلدهای aid کدانبار ، cid کدکالا ، qty مقدار کالا می باشد.
من این تریگر را برای جدول vorod قرار دادم
CREATE TRIGGER vo ON vorod 
FOR INSERT
AS
insert into mojodi (aid,cid,qty)
values ('10','1','111')

این تریگر در موقع درج در جدول vorod مقادیر ثابت 10و1و111  را به جدول mojodi وارد می کند ، نمی دانم که چطور بجای این مقادیر ثابت باید در جدول mojodi جستجو کنم و اگر این کالا تا کنون در این جدول نیست عمل درج را انجام دهم ( البته نه با مقادیر ثابت ، بلکه با اطلاعات رکوردی که در جدول vorod وارد شده) و در صورت موجود بودن آن کالا در انبار مقدار آنرا افزایش دهد.

با آرزوی سلامتی و موفقیت

----------


## AminSobati

دوست عزیزم،
شما جدول مجازی Inserted رو در این Trigger در اختیار دارین. میتونین ازش select بزنین و مقادیر وارد شده رو بدست بیارین.

----------


## nedata

این کد این کار را انجام میده اما اگر بخواهید با مقدار موجود قبلی جمع شود باید یک کم تغییر دهید

create trigger trginsertvorod on vorod
for insert,update
As
declare @Aid int
declare @Cid int
declare @qty int
Select @Aid=V.Aid,@Cid=V.Cid,@qty=V.qty
from Vorod V join Inserted on
V.Aid=Inserted.Aid
Update Mojodi Set Mojodi.Aid=@Aid,Mojodi.Cid=@cid,Mojodi.qty=@qty
from Mojodi join Inserted on
Mojodi.Aid=Inserted.Aid

----------


## am_sanatiz

> این کد این کار را انجام میده اما اگر بخواهید با مقدار موجود قبلی جمع شود باید یک کم تغییر دهید
> 
> create trigger trginsertvorod on vorod
> for insert,update
> As
> declare @Aid int
> declare @Cid int
> declare @qty int
> Select @Aid=V.Aid,@Cid=V.Cid,@qty=V.qty
> ...


من این کد را نوشتم اما هیچ عملی انجام نمی شود
می شود در مورد آن توضیحی بدهید
همچنین عبارت V چیست و چکاری انجام می دهد

----------


## am_sanatiz

> دوست عزیزم،
> شما جدول مجازی Inserted رو در این Trigger در اختیار دارین. میتونین ازش select بزنین و مقادیر وارد شده رو بدست بیارین.


لطفا یک مقدار بیشتر مرا در جریان قرار دهید
متشکر

----------


## حمیدرضاصادقیان

هنگامی که شما دارید از تریگر استفاده میکنید . جداولی به صورت مجازی در اختیار شما قرار میگیرد.به نامهای Inserted,Deleted  .وقتی که شما تریگر رو مینویسی فرضا برای عمل اضافه.وقتی رکوردی در جدول مربوط اضافه میشه اون ردیف در جدول Inserted نیز قرار میگیره.که شما در تریگر همونطور که دوستمون برای شما کدی رو قرار دادن میتونید جستجو کنید و ردیف و مقادیر مورد نظر رو پیدا کنید و در جدول اصلی جستجو کنید، اگر پپیدا کردین که انجام ندین در غیر اینصورت این موارد به جدول شما اضافه بشه.
موفق باشید.

----------


## nedata

در این کد  دو جدول داریم که در هر دو Aid و Cid با هم مشخص کننده یک رکورد هستند و عبارت V آلیاسی برای جدول  Vorod است. با کد زیر تریگر اجرای می شود.

alter trigger trginsertvorod on vorod
for insert,update
As
declare @Aid int
declare @Cid int
declare @qty int
Select @qty=V.qty
from Vorod V join Inserted on
V.Aid=Inserted.Aid and V.cid=Inserted.Cid
Update Mojodi Set Mojodi.qty=@qty
from Mojodi join Inserted on
Mojodi.Aid=Inserted.Aid and Mojodi.cid=Inserted.Cid

----------


## miyanabadi

سلام
سولماز هستم
من یه جدول دارم به نام employ که دو فیلد شماره کارمندی و نام دارد و یه جدول به نام record که دارای دو فیلد شماره کارمندی و نام متقاضی است و نشون میده که هر متقاضی رو کدوم کاربر ثبت نام کرده
من میخوان یه تریگر واسه employ بنویسم که اگه یه شماره کارمندی از جدول employ حذف شد سطر متناظر اون شماره کارمندی تو جدول record نیز حذف بشه
در ضمن با اس کیو ال 2008 دارم مینویسمش
زیادم با 2008 اشنایی ندارم
لطفا کمکم کنید
با تشکر

----------

