PDA

View Full Version : نحوه ساخت تریگر آپدیت؟



javad3151
شنبه 04 شهریور 1385, 08:24 صبح
سلام
برای Insert , Delete وقتی تریگر می نویسی مقادیرش رو از جدول Inserted , Deleted می خونیم . برای Update چطور باید کار کرد؟چطور رکورد آپدیت شده و پیدا کنیم و اینکه کدوم فیلدش آپدیت شده؟(من قبلا این سوال رو پرسیده بودم ولی به طرز مشکوکی حذف شده:متفکر: )

AminSobati
شنبه 04 شهریور 1385, 21:17 عصر
در Triggerی که برای Update مینویسید، هم جدول Deleted وجود داره و هم Inserted. به این مفهوم که رکوردهای در حال Update، انگار دارن با مقادیر قدیمی حذف میشن و با مقدار جدید دوباره Insert میشن. لذا اگر دستور Update شما مثلا 5 رکورد رو تحت تاثیر قرار بده، 5 رکورد در Deleted دارین و 5 رکورد در Inserted

whitehat
یک شنبه 05 شهریور 1385, 09:04 صبح
اینکه کدوم فیلدش آپدیت شده؟ برای این کار راه حل ساده ای که وجود داره استفاده از COLUMNS_UPDATED است . و برای اینکه دقیقا بدانید کدام فیلد ها باید Update می شده باید آنرا بصورت بیتی Or کنید و مقدار متغیر را بخوانید.یا مثلا اگر جدول شما دارای سه ستون c1,c2,c3 باشد و بخواهید بدانید ستون اول و سوم آیا Update شده از And منطقی استفاده ،کد زیر استفاده ببینید.



IF (COLUMNS_UPDATED() & 5)

.....

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

javad3151
یک شنبه 05 شهریور 1385, 10:56 صبح
باید آنرا بصورت بیتی Or کنید و مقدار متغیر را بخوانید
میشه بیشتر توضیح بدید ؟؟ یا یک مثال بزنید

whitehat
یک شنبه 05 شهریور 1385, 11:34 صبح
ببخشید در جواب کمی بی دقتی کردم شما با Or کردن با صفر فقط جواب درست بدست می آید که کار بیهوده ای است! خود تابع COLUMNS_UPDATED فیلد هایی که Update شدند را ست می کند. مثلا اگر 5 فیلد داشته باشید و فیلد اول ،سوم ، پنجم Update شده باشد این تابع مقدار 10101 را بصورت باینری بر میگرداند که معادل عدد 21 در مبنای 10 است.
موفق باشید