PDA

View Full Version : چک کردن وجود یک ایتم قبل از درج در تریگر



تبسم ساینا
دوشنبه 25 خرداد 1394, 11:08 صبح
سلام.. من دو تا جدول دارم که فرض کنید اسمش یکیش هست A و دیگری B.میخوام وقتی یه رکورد به جدول A اضافه میشه همون رکورد با کمی تغییرات به B هم اضافه بشه.ولی میخوام قبل از اینکه به B اضافه بشه , چک کنه ببینه این رکورد قبلا" وجود داره یا نه.چون این چک کردن وجود ایتم , باید بعد از درج در A و قبل از درج در B انجام بشه نمیدونم چطوری این چک کردن رو انجام بدم؟

SabaSabouhi
دوشنبه 25 خرداد 1394, 11:25 صبح
سلام.. من دو تا جدول دارم که فرض کنید اسمش یکیش هست A و دیگری B.میخوام وقتی یه رکورد به جدول A اضافه میشه همون رکورد با کمی تغییرات به B هم اضافه بشه.ولی میخوام قبل از اینکه به B اضافه بشه , چک کنه ببینه این رکورد قبلا" وجود داره یا نه.چون این چک کردن وجود ایتم , باید بعد از درج در A و قبل از درج در B انجام بشه نمیدونم چطوری این چک کردن رو انجام بدم؟

سلام
مشابه این پرسش بارها انجام شده، این کار رو می‌تونی به راحتی با Trigger انجام بدی.
اول این که Trigger وقتی فعال می‌شه که رکورد شما در جدول A درج شده ( همونطوری که می‌خواستی )
و همون‌جا می‌تونی در صورت عدم وجود اون سطر در جدول B، اون رو اضافه کنی.
و برای چک کردن، کافیه جدول inserted رو با جدول B بررسی کنی ( Left Outer Join )

اگه برنامه‌ی سه لایه داری، انجام این کار تو لایه‌ی business از نظر من به‌تر از اینه که تو Trigger انجام بشه.

صبا صبوحی

تبسم ساینا
دوشنبه 25 خرداد 1394, 12:03 عصر
مشکل اینه که درج در جدول A در تریگر انجام نمیشه و طی یه استور پروسیجر انجام میشه.چجوری میتونم به ItemName جدول A درحالی که در یه استور پروسیجر اضافه شده , دسترسی پیدا کنم و join انجام بدم ؟

SabaSabouhi
دوشنبه 25 خرداد 1394, 13:17 عصر
مشکل اینه که درج در جدول A در تریگر انجام نمیشه و طی یه استور پروسیجر انجام میشه.چجوری میتونم به ItemName جدول A درحالی که در یه استور پروسیجر اضافه شده , دسترسی پیدا کنم و join انجام بدم ؟

سلام
از پاسخ شما روشن هست که شناختی نسبت به Trigger نداری، این مبحث رو لازمه که کامل مطالعه کنی.
اگه این مبحث رو خوب یاد بگیری، مطمئن باش که به راحتی می‌تونی از این دست کارها رو انجام بدی

الان فقط می‌تونم این رو بهت بگم که یک جدول مجازی به نام inserted داخل trigger در دسترس هست که مقادیر اضافه شده به جدول
رو نگهداری می‌کنه. همونطور که تو پست قبلی بهت گفتم اگه این جدول رو با جدول B به صورت left outer join ارتباط بدی، می‌تونی سطرهایی
که در جدول B نیستن رو شناسایی کنی، و باز با مقادیر همین inserted اون‌ها رو پر کنی. ( کل قضیه فقط نیاز به یک فرمان insert داره، نه بیشتر )
یه چیزی تو این مایه‌ها:


INSERT INTO B
SELECT i.Id, i.Column1, i.Column2, i.Column3
FROM Inserted i
LEFT OUTER JOIN b on b.Id = i.Id
WHERE b.Id is NULL

به همین راحتی

صبا صبوحی