PDA

View Full Version : تعریف پارامترهای ورودی در trigger



a.maleki
یک شنبه 01 فروردین 1389, 09:50 صبح
با عرض سلام وتبریک سال نو
می خواستم بدونم آیا در تریگرهای ما می تونیم پارامترهای ورودی تعریف کنیم یه چیزی شبیه به SPهای معمولی که درونش می تونیم پارامتر تعریف کنیم
اگر میشود چطوری و ار نمیشود باید چکاری انجام بدیم

AminSobati
یک شنبه 01 فروردین 1389, 14:01 عصر
سلام دوست عزیزم،
در کل باید بگم خیر، پارامتر نمیشه ارسال کرد. این تنها فیلدهای جدول شما هستند که به Trigger راه پیدا میکنند. اگر اصل مشکل رو توضیح بدین، شاید بشه راه حلی پیشنهاد داد.

a.maleki
یک شنبه 01 فروردین 1389, 14:08 عصر
ممنون از توجهتون
راستش من 2 تا جدول دارم که زمانی که در جدول 1 مقادیری از درون برنامه ام ثبت میشه می خواهم در جدول 2 اطلاعات قبلی ویرایش بشه
حالا مشکلم اینه که در sp ما می تونستیم از طریق پارامترها فیلدها را از درون برنامه مقدار دهی کنیم ولی در تریگر این امکان وجود نداره حالا من چطوری باید فیلدها رو از طریق برنامه ام مقدار دهی کنم

AminSobati
دوشنبه 02 فروردین 1389, 01:46 صبح
هنوز صورت مسئله واضح نیست، ولی تا جاییکه متوجه شدم اگر بخوام راهنمایی کنم:
اگر اطلاعات در حال ویرایش با اطلاعات قبلی ارتباط دارند (مثلا از روی ID یا ...) میشه به کمک جداول Inserted یا Deleted به مقادیر در حال تغییر دسترسی پیدا کرد

a.maleki
دوشنبه 02 فروردین 1389, 11:58 صبح
ببینید دوست عزیز
من مشکلم سر اینه که چطوری مقادیر رو از طریق vs به تریگرم ارسال کنم

AminSobati
دوشنبه 02 فروردین 1389, 22:38 عصر
شاید انتظار شما از Trigger اون چیزی نباشه که اساسا براش اختراع شده! Trigger فقط جداول Inserted و Deleted رو در اختیار شما قرار میده. به نظر میرسه در طراحی برنامه اشکالی وجود داره

a.maleki
سه شنبه 03 فروردین 1389, 09:45 صبح
یعنی چی ؟ یعنی اینکه نمیشه از تریگر در برنامه هامون استفاده کنیم مثل یه sp
دوست عزیز به این کد یه نگاه بنداز


create trigger tgstd
on student
after insert
as
select count (stdno) fron student
insert into student (stdno,fname,lname)
values ('8563','albbas','maleki')
حالا من بجای مقادیر values که به صورت دستی اینجا وارد میشه می خواهم که کاربر مقادیر رو از طریق برنامه ای که توسط vs نوشته ایم وارد کنه آیا این کار به نظر شما غیر معموله اگر نه باید چیکار کنم

a.maleki
پنج شنبه 05 فروردین 1389, 11:39 صبح
دوستان کسی چیزی نمی دونه که من رو راهنمائی کنه

kourani
جمعه 06 فروردین 1389, 18:04 عصر
دوست عزیز یکی از کارهایی که تریگرها انجام میدن انجام دادن کارهای کنترلیه
نمیدونم منظورت را درست فهمیدم یا نه
اما در پایین یه نمونه تریگر که بر روی یک table تو sql نوشته شده رو می زارم .


CREATE TRIGGER [trg_InsHrsPersonnel] ON [dbo].[HRS_Personnel]
INSTEAD OF INSERT
AS
DECLARE @ICode nvarchar(20), @INationalNo nvarchar(20)
DECLARE @ISerial int,
''در قسمت بالا متغیرهایی را که از برنامه در کد insertوجود داره را معرفی می کنیم


SELECT @ICode = Code, @INationalNo = NationalNo, @ISerial = Serial FROM INSERTED
در قسمت بالا آن پارامترهایی را که در VS توسط دستور INSERT نوشته ی و می خواهد تو دیتابیس نوشته بشه از طریق From Inserted خونده می شه و در درون متغیرها قرار می گیره



IF EXISTS(SELECT Serial
FROM Hrs_Personnel
WHERE Code = @ICode
BEGIN
RAISERROR('كد پرسنلي وارد شده تكراري مي باشد', 15, 1)
RETURN
END
حالا در قسمت بالا من یک بخش کنترلی گذاشتم که اگر کد پرسنلی وارد شده که از قسمت from inserted
خونده شده تکراری بود پیغام بده و از نوشتن در دیتابیس خودداری کنه


INSERT INTO HRS_Personnel
SELECT * FROM Inserted

در کد بالا هم اگر مشکلی در داده های ورودی نباشه عمل insert تو دیتابیس رو انجام می ده

AminSobati
شنبه 07 فروردین 1389, 18:33 عصر
یعنی چی ؟ یعنی اینکه نمیشه از تریگر در برنامه هامون استفاده کنیم مثل یه sp
دوست عزیز به این کد یه نگاه بنداز


create trigger tgstd
on student
after insert
as
select count (stdno) fron student
insert into student (stdno,fname,lname)
values ('8563','albbas','maleki')
حالا من بجای مقادیر values که به صورت دستی اینجا وارد میشه می خواهم که کاربر مقادیر رو از طریق برنامه ای که توسط vs نوشته ایم وارد کنه آیا این کار به نظر شما غیر معموله اگر نه باید چیکار کنم

شما از تریگر دارین کار SP رو توقع میکنین! آیا دلیل خاصی داره که از SP استفاه نمیشه؟