PDA

View Full Version : چگونه به trigger یک پارامتر ارسال کنیم؟



karimi.ali2005
چهارشنبه 10 آذر 1389, 22:09 عصر
آیا برای یک trigger میشه پارامتری ارسال کرد یا اینکه چیزی مثل trigger وجود دارد که بعد از insert,updatو.. اجرا بشه وبتوان پارامتر تعریف کرد

AminSobati
جمعه 12 آذر 1389, 11:13 صبح
سلام دوست عزیزم،
به Trigger امکان ارسال پارامتر نیست، میتونین یک فیلد اضافی در جدول بگیرین و مقدار رو به اون فیلد بدین تا در Trigger قابل رویت باشه. ولی حدس میزنم نیاز شما چیزی باشه که با روش دیگه بشه به جواب رسید.

karimi.ali2005
یک شنبه 14 آذر 1389, 14:34 عصر
من داخل یک شبکه از sqlserver استفاده می کنم و داخل پایگاه یک جدول برای کاربران درست کرده ام حالا میخوام هر کاربر که یک اطلاعات دا خل بانک اضافه یا کم میکنه با استفاده از trigger داخل یک جدول بریزم و مشخص کنم که به کدام جدول چه رکورد اضافه یا کم شده تا اینجا که معلوم است از جدول deleted یا inserted استفاده میکنم و داخل جدولم میریزم اما نمیتونم شماره کاربر (id) را داخل جدول ثبت کنم

حمیدرضاصادقیان
یک شنبه 14 آذر 1389, 14:47 عصر
شما در واقع میخواهید LOG کاربران رو ذخیره کنید.
برای اینکار در داخل برنامه میتونید با استفاده از یک SP اینکارو انجام بدید.چون هر کاربری که Login میکنه اسم و مشخصاتش مشخص هست. شما کافیه در هرزمانی که رکوردی تغییر میکنه یا اضافه میشه این SP رو صدا زده و مقدار اون id رو نیز بهش پاس بدید.

ASKaffash
دوشنبه 15 آذر 1389, 08:34 صبح
من داخل یک شبکه از sqlserver استفاده می کنم و داخل پایگاه یک جدول برای کاربران درست کرده ام حالا میخوام هر کاربر که یک اطلاعات دا خل بانک اضافه یا کم میکنه با استفاده از trigger داخل یک جدول بریزم و مشخص کنم که به کدام جدول چه رکورد اضافه یا کم شده تا اینجا که معلوم است از جدول deleted یا inserted استفاده میکنم و داخل جدولم میریزم اما نمیتونم شماره کاربر (id) را داخل جدول ثبت کنم
سلام
کدام id این id توسط شما ایجاد شده ؟ یا منظور UserID ای که کاربر به SQLServer متصل شده ؟

karimi.ali2005
شنبه 20 آذر 1389, 16:18 عصر
منظورم همون id که خودم درست کردم نه نام user که کاربران به sqlserver وصل میشن
در صحبتام در بالا گفتم یک جدول دارم که یک فید id,user,password,... داره

حمیدرضاصادقیان
شنبه 20 آذر 1389, 16:34 عصر
منظورم همون id که خودم درست کردم نه نام user که کاربران به sqlserver وصل میشن
در صحبتام در بالا گفتم یک جدول دارم که یک فید id,user,password,... داره

باتوجه به شرایط شما باید از توضیحات پست 4 استفاده کنید.

ASKaffash
یک شنبه 21 آذر 1389, 07:43 صبح
منظورم همون id که خودم درست کردم نه نام user که کاربران به sqlserver وصل میشن
در صحبتام در بالا گفتم یک جدول دارم که یک فید id,user,password,... داره
سلام
تنها راه این است که یک فیلد برای UserID در جدول ایجاد کنید و از طریق برنامه کاربردی آن را پر کنید تا در جداول Inserted و deleted بتوانید به آن دسترسی داشته باشید پاس دادن پارامتر به تریگر نداریم

karimi.ali2005
دوشنبه 06 دی 1389, 16:56 عصر
ممنون از اینکه راهنمایی کردید همه اینها که میگید درسته من میخوام ببینم روشی هست که مثل trigger به راحتی وبدون فراخوانی(چون sp باید فراخوانی شود) بعد از هر update و delete فراخوانی شود

FSarab
سه شنبه 07 دی 1389, 10:48 صبح
با سلام
به ازاي هر كانكشني كه به ديتابيس وصل مي شود يك ركورد در جدول master.dbo.sysprocesses اضافه مي شود ، اين ركورد داراي يك فيلد كمكي به نام context_info است كه مي توانيد از آن به عنوان يك متغير سراسري در آن كانكشن استفاده كنيد و مي توانيد در تريگرها آن را فراخواني كنيد و در هنگام وصل شدن به
ديتابيس آنرا ست كنيد.

نحوه ست كردن context_info

declare @Context binary(128), @UserID int
set @UserID = 32
set @Context = cast(@UserID as binary(128))
set context_info @Context

نحوه فراخواني context_info در تريگر

declare @UserID int
select @UserID = cast(context_info as int) from master.dbo.sysprocesses where spid = @@spid
select @UserID

karimi.ali2005
سه شنبه 07 دی 1389, 16:40 عصر
خیلی ممنون یه یک سالی بود دنبال همچین کدی میگشتم