PDA

View Full Version : تشخیص رکوردی که insert یا update شده،در trigger؟!



بمب منطقی
پنج شنبه 07 اردیبهشت 1391, 14:12 عصر
با سلام خدمت اساتید بزرگوار:

می خواستم بدونم چطور میشه بر روی جدولی trigger ای بر روی insert و update نوشت،طوری که تشخیص بده کدام رکورد update و یا insert شده اند و رکورد مربوطه رو در جدولی دیگه که هم نوع جدول فعلی است درج کنه؟

با تشکر


پانویس:منظور از هم نوع بودن دو جدول اینه که نوع و تعداد و اسامی فیلهاشون یکی باشه.

حمیدرضاصادقیان
پنج شنبه 07 اردیبهشت 1391, 15:15 عصر
سلام
وقتی که دارید روی جدولی تریگر ایجاد میکنید بسته به نوع تریگر ایجاد شده برای Insert,Update در جدول Inserted ذخیره می شوند و مقادیر حذف شده در جدول Deleted ذخیره می شود که شما میتوانید با یک join مقادیر موجود در این جدول رو که همان رکوردهای تغییر داده شده یا اضافه شده هستند رو در جدول مورد نظرتون درج یا update کنید.
برای نوع تریگر میتونید در سایت جستجو کنید توضیحات کاملی وجود دارد.

بمب منطقی
شنبه 09 اردیبهشت 1391, 14:33 عصر
خیلی ممنون از وقتی که گذاشتین.با راهنمایی شما و جستجویی که زدم متوجه شدم که با یکچنین دستوری میشه کاری که خواستم رو انجام بدم:
CREATE TRIGGER trg1 ON dbo1.tbl1
FOR INSERT, UPDATE
AS INSERT INTO dbo2.tbl2 SELECT * FROM inserted

حالا دو سوال پیش میاد:
1- آیا هر بار که بر روی tbl1 تغییری رخ میده (update یا insert یا Delete) مقادیر جداول inserted و deleted برای جدول tbl1،با رکورد های تازه تغییر یافته رونویسی میشن (rewrite) ، یا اینکه رکوردهای تغییر یافته به جداول inserted یا deleted اضافه میشن (append)؟
2-آیا بطریقی که در کد نشون دادم میشه مقادیر جداول inserted و deleted رو از یک database به جدولی در database دوم انتقال داد؟

با تشکر فراوان از وقتی که در اختیار بنده قرار میدین.

SReza1
شنبه 09 اردیبهشت 1391, 16:52 عصر
با سلام خدمت اساتید بزرگوار:

می خواستم بدونم چطور میشه بر روی جدولی trigger ای بر روی insert و update نوشت،طوری که تشخیص بده کدام رکورد update و یا insert شده اند و رکورد مربوطه رو در جدولی دیگه که هم نوع جدول فعلی است درج کنه؟

با تشکر


پانویس:منظور از هم نوع بودن دو جدول اینه که نوع و تعداد و اسامی فیلهاشون یکی باشه.

عين سوالي كه پرسيدي جوابش رو دادم ببين
http://barnamenevis.org/showthread.php?335878-ساخت-تریگر&p=1487788#post1487788

بمب منطقی
یک شنبه 10 اردیبهشت 1391, 08:56 صبح
خیلی ممنون از راهنماییتون اتفاقا این پست شما رو مطالعه کرده بودم.اگه امکانش هست به دو سوال بعدیم هم جواب بدین.با تشکر

بمب منطقی
یک شنبه 10 اردیبهشت 1391, 09:07 صبح
جواب سوال 2 رو خودم پیدا کردم.کد باید به اینش کل تغییر کنه(قسمت قرمز رنگ):
CREATE TRIGGER trg1 ON tbl1
FOR INSERT, UPDATE
AS INSERT INTO dbo2.dbo.tbl2 SELECT * FROM inserted


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

حمیدرضاصادقیان
یک شنبه 10 اردیبهشت 1391, 09:32 صبح
جداولی که عرض کردم جداول موقتی هستند و با هربار تغییر محتویات اونها هم کامل تغییر میکنه و هیچ اثری از محتویات قبلی نداره.
در واقع وقتی شما عمل Update انجام میدین هم در جدول Deleted قرار میگیره هم در جدول Inserted .چون یک بار حذف شده و یکبار هم عمل درج صورت میگیره.
در مورد Delete ,Inesrt هم مشخصه و معلومه در چه جداولی قرار میگیرن.