PDA

View Full Version : ایجاد یک تریگر(trigger)



am_sanatiz
چهارشنبه 17 بهمن 1386, 11:31 صبح
با سلام
من در یک بانک اطلاعاتی در 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
چهارشنبه 17 بهمن 1386, 11:46 صبح
دوست عزیزم،
شما جدول مجازی Inserted رو در این Trigger در اختیار دارین. میتونین ازش select بزنین و مقادیر وارد شده رو بدست بیارین.

nedata
چهارشنبه 17 بهمن 1386, 21:37 عصر
این کد این کار را انجام میده اما اگر بخواهید با مقدار موجود قبلی جمع شود باید یک کم تغییر دهید


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
پنج شنبه 18 بهمن 1386, 09:47 صبح
این کد این کار را انجام میده اما اگر بخواهید با مقدار موجود قبلی جمع شود باید یک کم تغییر دهید


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

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

am_sanatiz
پنج شنبه 18 بهمن 1386, 09:50 صبح
دوست عزیزم،
شما جدول مجازی Inserted رو در این Trigger در اختیار دارین. میتونین ازش select بزنین و مقادیر وارد شده رو بدست بیارین.

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

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

nedata
پنج شنبه 18 بهمن 1386, 23:40 عصر
در این کد دو جدول داریم که در هر دو 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
شنبه 06 فروردین 1390, 16:50 عصر
سلام
سولماز هستم
من یه جدول دارم به نام employ که دو فیلد شماره کارمندی و نام دارد و یه جدول به نام record که دارای دو فیلد شماره کارمندی و نام متقاضی است و نشون میده که هر متقاضی رو کدوم کاربر ثبت نام کرده
من میخوان یه تریگر واسه employ بنویسم که اگه یه شماره کارمندی از جدول employ حذف شد سطر متناظر اون شماره کارمندی تو جدول record نیز حذف بشه
در ضمن با اس کیو ال 2008 دارم مینویسمش
زیادم با 2008 اشنایی ندارم
لطفا کمکم کنید
با تشکر