trigger در sql
اگر هر یک از تریگرها، بدون در نظر گرفتن سطح trigger در sql تودرتو، تراکنش بازگشتی را انجام دهد، دیگر ماشه ای اجرا نمی شود.
ماشه های تودرتو
میتوانید ماشهها را حداکثر تا 32 سطح قرار دهید. اگر یک ماشه جدولی را تغییر دهد که در آن یک ماشه دیگر وجود دارد، تریگر دوم فعال می شود و سپس می تواند یک ماشه سوم را فراخوانی کند و غیره. اگر هر یک از ماشه ها در زنجیره یک حلقه بی نهایت ایجاد کند، از سطح تودرتو فراتر رفته و ماشه لغو می شود. هنگامی که یک تریگر Transact-SQL کد مدیریت شده را با ارجاع به روال، نوع یا جمع CLR راه اندازی می کند، این مرجع به عنوان یک سطح در برابر محدودیت 32 سطحی تودرتو به حساب می آید. روشهایی که از داخل کد مدیریت شده فراخوانی میشوند در این محدودیت حساب نمیشوند.
برای غیرفعال کردن تریگرهای تودرتو، گزینه تریگرهای trigger در sql تودرتو در sp_configure را روی 0 (خاموش) قرار دهید. پیکربندی پیشفرض از تریگرهای تودرتو پشتیبانی میکند. اگر محرکهای تودرتو خاموش باشند، با وجود تنظیم RECURSIVE_TRIGGERS که با استفاده از ALTER DATABASE تنظیم شده است، محرکهای بازگشتی نیز غیرفعال میشوند.
اولین تریگر AFTER که در داخل یک تریگر جای گرفته است، حتی اگر گزینه پیکربندی سرور محرک های تودرتو 0 باشد، فعال می شود. اما، تحت این تنظیم، تریگرهای بعدی AFTER فعال نمی شوند. هنگامی که گزینه پیکربندی سرور راهاندازهای تودرتو روی 0 تنظیم شده است، برنامههای خود را برای راهاندازهای تودرتو بررسی کنید تا مشخص کنید آیا برنامهها از قوانین تجاری شما پیروی میکنند یا خیر. اگر نه، اصلاحات مناسب را انجام دهید.
قطعنامه نام معوق
SQL Server اجازه می دهد تا رویه ها، تریگرها trigger در sql و دسته های ذخیره شده Transact-SQL به جداولی که در زمان کامپایل وجود ندارند ارجاع دهند. به این قابلیت تفکیک نام معوق می گویند.
مجوزها
برای ایجاد یک تریگر DML، به مجوز ALTER در جدول یا ایرانیان سایبرنمایه ای که تریگر روی آن ایجاد می شود نیاز دارد.
برای ایجاد یک ماشه DDL با دامنه سرور (ON ALL SERVER) یا یک ماشه ورود به سیستم، به مجوز CONTROL SERVER در سرور نیاز است. برای ایجاد یک ماشه DDL با دامنه پایگاه داده (ON DATABASE)، به مجوز تغییر هر پایگاه داده DDL TRIGGER در پایگاه داده فعلی نیاز است.
مثال هاالف. استفاده از یک ماشه DML با پیام یادآور
هنگامی که هر کسی سعی می کند داده ها را در جدول مشتری در پایگاه داده AdventureWorks2012 اضافه یا تغییر دهد، ماشه DML زیر پیامی را برای مشتری چاپ می کند.
ب. استفاده از یک ماشه DML با یک پیام ایمیل یادآوری مثال زیر هنگامی که جدول مشتری تغییر می کند، یک پیام ایمیل به یک شخص مشخص (MaryM) ارسال می کند.
ج. استفاده از یک ماشه DML AFTER برای trigger در sql اجرای یک قانون تجاری بین جداول PurchaseOrderHeader و Vendor
از آنجایی که محدودیتهای CHECK تنها به ستونهایی اشاره میکنند که محدودیت سطح ستون یا سطح جدول بر روی آنها تعریف شده است، شما باید هرگونه محدودیت جدول متقاطع (در این مورد، قوانین تجاری) را به عنوان محرک تعریف کنید.
مثال زیر یک تریگر DML در پایگاه داده AdventureWorks2012 ایجاد می کند. هنگامی که تلاشی برای درج سفارش خرید جدید در جدول PurchaseOrderHeader وجود دارد، این ماشه بررسی میکند تا مطمئن شود رتبه اعتباری فروشنده خوب است (نه 5). برای دریافت رتبه اعتباری فروشنده، باید به جدول Vendor ارجاع داده شود. اگر رتبه اعتباری خیلی پایین باشد، پیامی ظاهر می شود و درج انجام نمی شود.
RAISERROR (رتبه اعتباری یک فروشنده برای پذیرش جدید بسیار trigger sql پایین استسفارشات خرید.', 16, 1);تراکنش برگشتی;برگشتپایان؛برو -- این عبارت سعی می کند یک ردیف را در جدول PurchaseOrderHeader درج کند-- برای فروشنده
Comments
Post a Comment