trigger در sql یک راهانداز DML، DDL یا لاگین ایجاد میکند. مثال تریگر در sql تریگر نوع خاصی از رویه های trigger در sql ذخیره شده است که به صورت خودکار زمانی که رویدادی در سرور پایگاه داده trigger در sql رخ می دهد اجرا می شود.
هنگامی که کاربر سعی می کند trigger در sql داده ها را از طریق یک رویداد زبان دستکاری داده (DML) تغییر دهد، راه اندازی های DML اجرا می شوند. رویدادهای DML عبارتهای INSERT، UPDATE یا DELETE در trigger در sql جدول یا نما هستند.
زمانی که هر رویداد معتبری فعال میشود، چه ردیفهای جدول تحت تأثیر قرار گرفته باشند یا نه، این موارد trigger در sql فعال میشوند. برای اطلاعات بیشتر، به محرک های DML مراجعه کنید.تریگرهای DDL در پاسخ به انواع رویدادهای زبان تعریف داده (DDL) اجرا می شوند. این رویدادها عمدتاً با دستورات Transact-SQL CREATE، ALTER، و DROP و رویههای ذخیرهشده خاصی که عملیاتهای DDL مانند را انجام میدهند، مطابقت دارند.
پیشنهاد می کنیم به مشاهده مقاله دستورات sql چیست بپردازید.
trigger در sql
Logon در پاسخ به رویداد LOGON که هنگام برقراری جلسه کاربر ایجاد می شود، آتش را راه اندازی می کند. میتوانید trigger در sql مستقیماً از دستورات Transact-SQL یا از روشهای مجموعههایی مثال تریگر در sql که در زمان اجرا زبان مشترک Microsoft .NET Framework (CLR) ایجاد میشوند و در نمونهای از SQL Server آپلود میشوند، تریگرها ایجاد کنید. SQL Server به شما این امکان را می دهد که برای هر عبارت خاص چندین تریگر ایجاد کنید.
نام طرح واره ای که یک تریگر DML به آن تعلق دارد. تریگرهای DML به طرح جدول یا نمایه ای که روی آن ایجاد شده اند، قرار می گیرند. schema_name را نمیتوان برای راهاندازهای DDL یا ورود به سیستم trigger در sql مشخص کرد.
نام ماشه. یک trigger_name باید از قوانین شناسه ها پیروی کند، با این تفاوت که trigger_name نمی تواند با # یا ## شروع شود.
پیشنهاد می کنیم به مشاهده مقاله مفاهیم پایگاه داده sql server بپردازید.
جدول | چشم انداز.جدول یا نمایی که تریگر DML روی آن اجرا می شود. trigger در sql این جدول یا نمای گاهی اوقات به عنوان جدول ماشه یا نمای ماشه نیز شناخته می شود. تعیین نام کاملاً واجد شرایط جدول یا مثال تریگر در sql نما اختیاری است.
شما فقط می توانید یک نما را trigger در sql به جای ماشه ارجاع دهید. شما نمی توانید تریگرهای DML را در جداول موقت محلی یا جهانی تعریف کنید.پایگاه داده دامنه یک ماشه DDL را در پایگاه داده فعلی اعمال می کند. اگر مشخص شده باشد، هر زمان event_type یا event_group در پایگاه داده فعلی رخ دهد، ماشه فعال می شود.
مثال تریگر در sql
همه سرور.برای: SQL Server 2008 و بالاتر اعمال می شود.دامنه یک DDL یا ماشه ورود به سرور را اعمال می کند. اگر مشخص شده باشد، هر زمانی که event_type یا event_group در هر نقطه از سرور فعلی رخ دهد،
ماشه فعال می شود.با رمزگذاریبرای: SQL Server 2008 و بالاتر اعمال می شود.متن عبارت CREATE TRIGGER را مبهم “trigger در sql” می کند. استفاده از WITH ENCRYPTION از انتشار ماشه به عنوان بخشی از تکرار SQL Server جلوگیری می کند. WITH ENCRYPTION را نمی توان برای محرک های CLR مشخص کرد.
اجرا به عنوان.زمینه امنیتی را که تریگر تحت آن اجرا می شود را مشخص می کند. مثال تریگر در sql شما را قادر می سازد تا کنترل کنید که نمونه SQL Server از کدام حساب کاربری برای اعتبارسنجی مجوزها در هر شی پایگاه داده که توسط ماشه به آنها ارجاع می شود استفاده می کند.
این گزینه برای تریگرها در trigger در sql جداول بهینه شده برای حافظه ضروری است.برای اطلاعات بیشتر، EXECUTE AS Clause (Transact-SQL) را ببینید.NATIVE_COMPILATION.
نشان می دهد که ماشه به صورت بومی کامپایل شده است.این گزینه برای تریگرها در جداول بهینه شده برای حافظه ضروری است.طرحواره سازی اطمینان حاصل می کند که جداول ارجاع شده توسط یک ماشه نمی توانند حذف یا تغییر داده شوند.
این گزینه برای تریگرها در جداول بهینه سازی شده برای حافظه ضروری است و برای تریگرها در جداول سنتی پشتیبانی نمی شود.برای | بعد ازFOR یا AFTER مشخص میکند که تریگر DML تنها زمانی فعال trigger در sql میشود که تمام عملیات مشخصشده در دستور SQL راهاندازی با موفقیت راهاندازی شده باشند.
تمام اقدامات آبشاری ارجاعی و بررسی های محدودیت نیز باید قبل از شروع آتش سوزی با موفقیت انجام شود.شما نمی توانید AFTER triggers را روی نماها تعریف کنید.بجای مشخص میکند که تریگر DML به مثال تریگر در sql جای دستور SQL راهاندازی راهاندازی میشود،
بنابراین، اقدامات دستورات راهاندازی را لغو میکند. شما نمی توانید به جای فعال کننده های DDL یا ورود به سیستم را trigger در sql مشخص کنید.حداکثر میتوانید در هر عبارت INSERT، UPDATE، یا DELETE یک راهانداز به جای ماشه در جدول یا نما تعریف کنید.
پیشنهاد می کنیم به مشاهده مقاله دستورات sql در پایگاه داده بپردازید.
همچنین میتوانید نماهایی را در نماهایی تعریف کنید که هر نما بهجای محرک خاص trigger در sql خود را دارد.نمیتوانید بهجای محرکها در نماهای قابل بهروزرسانی که از گزینه WITH CHECK استفاده میکنند، تعریف کنید.
انجام این کار منجر به بروز خطا در هنگام اضافه شدن یک ماشه به جای بهروزرسانی به نمای قابل بهروزرسانی با تعیین گزینه بررسی میشود. شما آن گزینه را با استفاده از ALTER VIEW قبل از تعریف به جای ماشه حذف می کنید.
عبارات اصلاح دادهها را مشخص میکند که راهانداز DML را هنگامی که در مقابل این جدول یا نما امتحان میشود، فعال میکند. حداقل یک گزینه را مشخص کنید. از هر ترکیبی از این گزینه ها به هر ترتیبی در تعریف ماشه استفاده کنید.
برای به جای محرکها، نمیتوانید از گزینه DELETE در جداولی که رابطه ارجاعی دارند، استفاده کنید و یک اقدام آبشاری در DELETE را مشخص کنید. به طور مشابه، گزینه UPDATE در جداولی که دارای رابطه ارجاعی هستند، مجاز نیست و یک trigger در sql اقدام آبشاری در به روز رسانی را مشخص می کند.
مشخص می کند که یک ماشه اضافی از نوع موجود باید اضافه شود. WITH APPEND را نمیتوان به جای محرکها یا اگر به صراحت یک ماشه AFTER ذکر شده است استفاده کرد. برای سازگاری با عقب، فقط زمانی از WITH APPEND استفاده کنید که FOR مشخص شده باشد،
بدون STEAD OF یا AFTER. نمیتوانید WITH APPEND را مشخص کنید که از EXTERNAL NAME استفاده میکند (یعنی اگر ماشه یک ماشه CLR باشد).
رویداد_نوع.نام رویداد زبان Transact-SQL که پس از راهاندازی، باعث فعال شدن تریگر DDL میشود. رویدادهای معتبر برای محرکهای DDL در رویدادهای DDL فهرست شدهاند.رویداد_گروه نام گروه بندی از پیش تعریف شده رویدادهای زبان Transact-SQL.
ماشه DDL پس از راه اندازی هر رویداد زبان Transact-SQL که به event_group تعلق دارد فعال trigger در sql می شود. گروههای رویداد معتبر برای محرکهای DDL در گروههای رویداد DDL فهرست شدهاند.
پس از پایان اجرای CREATE TRIGGER، event_group با افزودن انواع رویدادهایی که پوشش می دهد به نمای کاتالوگ sys.trigger_events به عنوان یک ماکرو عمل می کند.نه برای تکراربرای: SQL Server 2008 و بالاتر اعمال می شود.
نشان می دهد که وقتی یک عامل تکرار جدولی را که در تریگر دخیل است تغییر می دهد، ماشه نباید اجرا شود.sql_statement شرایط و اقدامات ماشه شرایط ماشه، additi را مشخص می کند معیارهای اصلی مثال تریگر در sql که تعیین می کنند آیا رویدادهای DML، DDL یا ورود به سیستم باعث trigger در sql اجرای اقدامات ماشه می شوند یا خیر.
اقدامات ماشه مشخص شده در دستورات Transact-SQL زمانی که عملیات امتحان می شود، اعمال می شوند.تریگرها می توانند شامل هر تعداد و نوع عبارات Transact-SQL باشند، به استثنای موارد. برای اطلاعات بیشتر، به اظهارات trigger در sql مراجعه کنید.
یک ماشه برای بررسی یا تغییر داده ها بر اساس اصلاح داده یا بیانیه تعریف طراحی شده است. نباید داده ها را به کاربر برگرداند. عبارات Transact-SQL در یک ماشه اغلب شامل زبان کنترل جریان است.
تریگرهای DML از جداول منطقی (مفهومی) حذف شده و درج شده استفاده می کنند. آنها از نظر ساختاری شبیه جدولی هستند که تریگر روی آن تعریف شده است، یعنی جدولی که عملکرد کاربر روی آن آزمایش می شود.
جداول حذف شده و درج شده مقادیر قدیمی یا مقادیر جدید سطرهایی را که ممکن است توسط عملکرد کاربر تغییر کند را در خود نگه می دارد. به عنوان trigger در sql مثال، برای بازیابی همه مقادیر در جدول حذف شده، از:SQLمحرکهای DDL و لاگین با استفاده از تابع EVENTDATA (Transact-SQL) اطلاعات مربوط به رویداد راهاندازی را ضبط میکنند.
پیشنهاد می کنیم به مشاهده مقاله آموزش کامل دستورات sql server بپردازید.
برای اطلاعات بیشتر، استفاده از تابع EVENTDATA را ببینید.SQL Server بهروزرسانی ستونهای متن، ntext یا تصویر را از طریق تریگر به جای جداول یا نماها امکانپذیر میسازد.انواع داده ntext، متن و تصویر مثال تریگر در sql در نسخه بعدی Microsoft SQL Server حذف خواهند شد.
از استفاده از این نوع داده ها trigger در sql در کارهای توسعه جدید خودداری کنید و برای اصلاح برنامه هایی که در حال حاضر از آنها استفاده می کنند برنامه ریزی کنید. به جای آن از nvarchar(max)، varchar(max) و varbinary(max) استفاده کنید.
متد باید هیچ آرگومان نداشته باشد و void برگرداند. class_name باید یک شناسه SQL Server معتبر باشد و باید به عنوان یک کلاس در اسمبلی با قابلیت مشاهده اسمبلی وجود داشته باشد. اگر کلاس دارای یک نام واجد شرایط فضای نام است
که از «.» استفاده می کند. برای جدا کردن قسمتهای فضای نام، نام کلاس باید با استفاده از جداکنندههای [ ] یا ” ” محدود شود. کلاس trigger در sql نمی تواند یک کلاس تودرتو باشد.به طور پیش فرض، توانایی SQL Server برای اجرای کد CLR خاموش است.
شما می توانید اشیاء پایگاه داده ای را که به ماژول های کد مدیریت شده ارجاع می دهند ایجاد، اصلاح و رها کنید، اما این مراجع در نمونه ای از SQL Server اجرا نمی شوند مگر اینکه گزینه clr فعال شده
با استفاده از sp_configure فعال شود.نکاتی trigger در sql برای محرک های DMLمحرک های DML اغلب برای اجرای قوانین تجاری و یکپارچگی داده ها استفاده می شوند. SQL Server یکپارچگی ارجاعی اعلامی (DRI) را از طریق دستورات ALTER TABLE و CREATE TABLE فراهم می کند.
با این حال، DRI یکپارچگی ارجاعی بین پایگاه داده را ارائه نمی دهد. یکپارچگی ارجاعی به قوانین مربوط به روابط بین کلیدهای اصلی و خارجی جداول اشاره دارد. برای اعمال یکپارچگی ارجاعی، از محدودیت های کلید اولیه و کلید خارجی در ALTER TABLE و CREATE TABLE استفاده کنید.
اگر محدودیتهایی در جدول trigger در sql ماشه وجود داشته باشد، پس از اجرای تریگر به جای اجرای ماشه و قبل از اجرای تریگر AFTER بررسی میشوند. اگر محدودیت ها نقض شوند، اقدامات INSEAD OF trigger به عقب برگشته و ماشه AFTER فعال نمی شود.
یک تریگر AFTER تنها پس از اجرای موفقیت آمیز دستور SQL آغازگر اجرا می شود. این اجرای موفقیت آمیز شامل تمام اقدامات آبشاری ارجاعی و بررسی محدودیت های مرتبط با شی به روز شده یا حذف شده است.
یک AFTER بهجای یک ماشه روی یک جدول به صورت بازگشتی trigger در sql شلیک نمیکند.اگر یک تریگر به جای تعریف شده روی جدول، عبارتی را در مقابل جدول اجرا کند که معمولاً تریگر INSTTEAD OF را دوباره فعال می کند، تریگر به صورت بازگشتی فراخوانی نمی شود.
در عوض، دستور به گونهای پردازش میکند که گویی جدول به جای ماشهای ندارد و زنجیره عملیات محدودیت و پس از اجرای ماشه را شروع میکند. به عنوان مثال، اگر یک ماشه به عنوان یک ماشه به جای INSERT برای یک جدول تعریف شود.
و، ماشه یک دستور INSERT را روی همان جدول اجرا میکند، دستور INSERT که توسط تریگر trigger در sql به جای ماشه راهاندازی شده است، دوباره ماشه را فراخوانی نمیکند. INSERT راه اندازی شده توسط تریگر، فرآیند اجرای اقدامات محدودیت و شلیک هر تریگر AFTER INSERT تعریف شده برای جدول را آغاز می کند.
هنگامی که به جای ماشه.تعریف شده در یک view، دستوری را در برابر دیدگاهی اجرا می کند که معمولاً به جای ماشه دوباره فعال می شود، به صورت بازگشتی فراخوانی نمی شود. درعوض، عبارت به عنوان تغییراتی در برابر جداول پایه زیر نمای trigger در sql آن حل می شود.
در این حالت، تعریف view باید تمام محدودیتهای یک نمای قابل بهروزرسانی را داشته باشد. برای تعریف نماهای قابل به روز رسانی، به اصلاح داده ها از طریق نما مراجعه کنید.
به عنوان مثال، اگر یک ماشه به عنوان یک ماشه به جای به روز رسانی برای یک view تعریف شود. و، ماشه یک عبارت UPDATE را اجرا می کند که به همان نمای ارجاع می دهد، دستور UPDATE که توسط تریگر به جای ماشه راه اندازی شده است،
ماشه را دوباره فراخوانی نمی کند. بهروزرسانی راهاندازیشده توسط ماشه در برابر نما پردازش میشود که گویی نمای بهجای trigger در sql ماشهای ندارد. ستونهای تغییر یافته توسط UPDATE باید به یک جدول مبنا تبدیل شوند.
هر تغییر در جدول پایه زیربنایی، زنجیره اعمال محدودیت ها و AFTER را آغاز می کند که برای جدول شلیک تعریف شده است.آزمایش برای بهروزرسانی یا درج اقدامات در ستونهای خاص می توانید
یک تریگر Transact-SQL برای انجام اقدامات خاصی بر اساس تغییرات به روز رسانی یا INSERT در ستون trigger در sql های خاص طراحی کنید. برای این منظور از UPDATE() یا COLUMNS_UPDATED در بدنه ماشه استفاده کنید. UPDATE() برای تلاش های UPDATE یا INSERT روی یک ستون آزمایش می کند.
به قوت خود باقی می ماند و سپس به تنظیمات قبلی خود باز می گردد.هنگامی که یک ماشه فعال می شود، نتایج به برنامه فراخوانی بازگردانده می شود، درست مانند رویه های ذخیره شده. برای جلوگیری از بازگشت به یک برنامه به دلیل شلیک ماشه، از عبارت SELECT که نتایج trigger در sql را برمیگرداند یا عبارتهایی که تخصیص متغیر را در یک تریگر انجام میدهند، خودداری کنید.
یک ماشه که شامل دستورات SELECT است که نتایج را به کاربر برمیگرداند یا عبارتهایی که انتساب متغیر را انجام میدهند، نیاز به رسیدگی خاصی دارد. شما باید نتایج برگشتی را در هر برنامهای که در آن تغییرات در جدول ماشه مجاز است، بنویسید.
اگر تخصیص متغیر باید در یک تریگر اتفاق بیفتد، از عبارت SET NOCOUNT در شروع تریگر استفاده کنید تا از بازگشت هر مجموعه trigger در sql نتیجه جلوگیری کنید.اگرچه یک دستور TRUNCATE TABLE در واقع یک دستور DELETE است.
اما یک راهانداز را فعال نمیکند زیرا عملیات حذف ردیفهای جداگانه را ثبت نمیکند. با این حال، فقط آن دسته از کاربرانی که مجوز اجرای دستور TRUNCATE TABLE را دارند، باید نگران دور زدن ناخواسته یک ماشه DELETE از این طریق باشند.عبارت WRITETEXT، چه وارد trigger در sql شده باشد
و چه از سیستم خارج شده باشد، یک ماشه را فعال نمی کند.دستورات Transact-SQL زیر در تریگر DML مجاز نیستند:تغییر پایگاه داده ایجاد پایگاه داده.رها کردن پایگاه داده.بازیابی پایگاه داده.بازیابی گزارش.
علاوه بر این، عبارات Transact-SQL زیر در داخل بدنه یک ماشه DML مجاز نیستند، زمانی که در مقابل جدول یا نمای که هدف اقدام راهاندازی است استفاده میشود.از آنجایی که SQL Server از تریگرهای تعریف شده توسط کاربر در جداول سیستم پشتیبانی نمی کند،
توصیه می کنیم از ایجاد تریگرهای تعریف شده توسط کاربر در جداول trigger در sql سیستم خودداری کنید.بهینه سازی محرک های DML تریگرها در تراکنش ها (به طور ضمنی یا غیرمستقیم) کار می کنند و در حالی که باز هستند، منابع را قفل می کنند.
این رویداد زمانی اتفاق می افتد که یک جلسه کاربر با نمونه ای از SQL Server ایجاد شود. Logon پس از اتمام مرحله احراز هویت، ورود به سیستم، اما قبل از برقراری جلسه کاربر، آتش میزند.
بنابراین، تمام پیامهایی که از trigger در sql داخل ماشه سرچشمه میگیرند و معمولاً به کاربر میرسند، مانند پیامهای خطا و پیامهای بیانیه PRINT، به گزارش خطای SQL Server هدایت میشوند. برای اطلاعات بیشتر، به محرک های ورود مراجعه کنید.
اگر احراز هویت ناموفق باشد، راهاندازهای ورود فعال نمیشوند.تراکنشهای توزیعشده در راهانداز ورود پشتیبانی نمیشوند. خطای 3969 زمانی برمی گردد که یک تریگر لاگین که حاوی آتش تراکنش توزیع شده باشد.
غیرفعال کردن یک ماشه ورود یک راهانداز ورود به سیستم میتواند از اتصال مؤثر موفقیتآمیز به موتور پایگاه داده برای trigger در sql همه کاربران، از جمله اعضای نقش سرور ثابت sysadmin جلوگیری کند. هنگامی که یک راهانداز ورود به سیستم از اتصالات جلوگیری میکند.
جداول درج شده و حذف شده برای یک تریگر خاص حاوی ردیف هایی هستند که فقط با عبارت UPDATE مطابقت دارند که تریگر را فراخوانی کرده است.رفتار قبلی trigger در sql تنها در صورتی رخ می دهد که تنظیم RECURSIVE_TRIGGERS با استفاده از ALTER DATABASE فعال شود. هیچ ترتیب مشخصی وجود ندارد که در آن چندین محرک برای یک شب خاص تعریف شده باشد.