ﻢﯿﺣﺮﻟا ﻦﻤﺣﺮﻟا ﷲا ﻢﺴﺑروآ نﺎﯾز ﻞﻣﺎﻋ ﻪﺳ ﻪﮐ هﺪﺷ ﻞﻘﻧ (ﻦﯿﺘﺸﻨﯾا تﺮﺒﻟآ) گرﺰﺑ ﺮﮕﺸﻫوﮋﭘ
Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. ·...
Transcript of Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. ·...
Stored Procedure & Trigger In SQL
Stored Procedure ھا
2
Stored Procedure ھا
Stored Procedure & Trigger In SQL
SP سر نام کلماتStored Procedure و به معناي رويه هاي ذخيره شده ميباشد که اشيايي
مي SQLهستند و شامل يک يا چندين دستور SQL Server اجرا پذير در بانک اطالعاتي
.باشند ، اين رويه ها ميتوانند پارامتر هاي ورودي و خروجي نيز داشته باشند
.برنامه نويسي کرد SQLهمچنين ميتوان داخل اين رويه ها به زبان
يا ترکيبي از Select ,Insert , Update , Deleteمهم ترين کاربرد اين رويه ها، ذخيره کردن
SP ست؟يچ
3
يا ترکيبي از Select ,Insert , Update , Deleteمهم ترين کاربرد اين رويه ها، ذخيره کردن
.اين موارد ميباشد
به SQL Serverبراي اولين بار روالهاي ذخيره شده را در 1980در اواخر دهه Sybaseشرکت
د جداول و ايندکس ها، پس از ساخته شدن، در پايگاه داده ها ذخيره ناين روال ها مان. کار برد
. ميشوند
Stored Procedure & Trigger In SQL
•Precompiled بودن آنها به اين معني که به زبان ماشين بسيار نزديک شده و به طور کامل از. اول ترجمه نميشود ، اين امر باعث افزايش سرعت بارگزاري مي گردد
. قابليت ذخيره داشته و ميتوان از يک رويه چندين بار در کد نويسي استفاده کرد •)حرفه اي ايجاد کنيد Queryميتوانيد به سادگي يک (مي باشد Queryداراي ويرايشگر •
:عبارت است از Stored Procedureبرخي از قابليت هاي رويه هاي ذخيره شده يا
4
Stored Procedure & Trigger In SQL
. جلوگيري مي کند SQLهست و از خطاهاي Syntax Parserداراي •در بسياري موارد SQL Injectionداراي امنيت بااليي است و از هک شدن سايت شما توسط •
. جلوگيري مي کند . را پشت سرهم داراست SQLقابليت درج چندين دستور •. قابليت ارسال ورودي و خروجي دارد •. دارد TransactSQLبه زبان ...) شرط ، حلقه و( قابليت برنامه نويسي •
5
. دارد TransactSQLبه زبان ...) شرط ، حلقه و( قابليت برنامه نويسي •.....و
Stored Procedure & Trigger In SQL
شده و جهت درج SQL Serverوارد نرم افزار Query سپس به صورت زير . جديد اقدام ميکنيم
Stored Procedure مورد نظر را ايجاد.مينمائيم
Stored Procedureنحوه ايجاد
6
Create Procedure نام روال پارامتراول@) نوع داده پارامتر دوم@ , (...,نوع داده
As
Begin
SQLدستورات
End
Stored Procedure & Trigger In SQL
هاي ايجاد شده، Stored Procedureجهت مشاهده
شويد و در SQL Serverميتوانيد وارد نرم افزار
از مسير زير اقدام Object Explorerپنجره
.فرماييد
هاي ايجاد شده Stored Procedureمشاهده
7
DataBaesesè èعنوان پايگاه دادهProgrammability è Stored Procedures
Stored Procedure & Trigger In SQL
Studentانتخاب نام دانش آموز از جدول
Create Procedure Student_SelectName (@ID int)
As
Begin
Select Name From Student Where ID=@ID
8
Return (@@RowCount)
End
را به خروجي فرستاد که ما در Intميتوان يک مقدار از نوع Returnبا استفاده از دستور همچنين.را بازگشت داده ايم Selectاينجا تعداد رکوردهاي حاصل از دستور
Stored Procedure & Trigger In SQL
Outpoutاستفاده از پارامتر
Create Procedure Student_SelectName (@ID int , @Name Nvarchar(50) Output)
As
Begin
Select @Name=Name From Student Where ID=@ID
Return(@@RowCount)
9
Return(@@RowCount)
End
ميباشد و با استفاده از آن، نام دانش آموز به خروجي فرستاده Outputاز نوع Name@پارامتر .داده خواهد شد
Stored Procedure & Trigger In SQL
استفاده از پارامتر اختياري
Create Procedure Student_Insert (@Name Nvarchar(50), @Sex bit = 1 )
As
Begin
Insert Into Student(Name,Sex) Values(@Name,@Sex)
10
Return(@@Identity)
End
براي آن در نظر گرفته 1اختياري ميباشد و درصورت عدم مقداردهي، مقدار پيشفرض Sex@پارامتر .خواهد شدرکوردي که در حال درج کردن آن IDمقدار Return (@@Identity)توسط دستور همچنين،
هستيم بازگردانده ميشود@@identityاز نوع در جدول ، به فيلدي کهAutoNumber در نظر گرفته شده است اشاره ميکند
Stored Procedure & Trigger In SQL
ديگر Stored Procedureدر Stored Procedureاجراي
Create Procedure Student_MyQueryAs
Create Procedure Student_SelectByName (@Name Nvarchar(50) )As
BeginReturn(Select Count(*) from Student Where Name=@Name )
End
11
AsBegin
Declare @Result intExec @Result=Student_SelectByName @Name=‘MohammadZavvar’If (@Result=0)
Exec Student_Insert @Name=‘MohammadZavvar’Return(@@RowCount)
Endرا اجرا ميکند، در صورتي که Student_SelectByNameروال ديگري با نام Student_MyQueryروال
.وجود نداشته باشد، دنش آموزي با اين نام درج خواهد شدMohammadZavvarدانش آموزي به نام انجام ميگردد Execبا کلمه کليدي SPالزم به ذکر است که اجراي
Stored Procedure & Trigger In SQL
ها Stored Procedureبهينه سازي
هاي سيستمي موجود در جدول spزيرا اين عالمت مخصوص . استفاده نكنيد sp_از SPدر نامهاي •master ميباشد و هنگامي كه از اين اختصار استفاده ميكنيد سيستم ابتدا دنبال اين نام در جداول
.خواهد شد spسيستمي ميگردد كه اين امر باعث کاهش سرعت اجراي استفاده كرد، هركدام را در Selectبهتر است به جاي اينكه داخل آن از دو دستور SPدر داخل يك •
.قرار داده و آنرا به هنگام نياز اجرا كنيم SPداخل يك Cacheميتواند در داخل Queryفقط يك spدليل استفاده از اين روش اين است که در داخل هر
12
Cacheميتواند در داخل Queryفقط يك spدليل استفاده از اين روش اين است که در داخل هر
SQL قرار گيرد و اگر از چند دستورSql در داخل يکSP استفاده نمائيد هر دفعه كه اينSP اجرا.شود مجدد كامپايل خواهد شد و اين امر موجب کاهش سرعت اجرا ميگردد
هايي كه نياز نيست كاربر متوجه شود چه تعداد رديف تحت تاثير قرار گرفته است،حتماً در اول SPدر •SP دستورSet NoCount On زيرا اگر اين دستور را ننويسيد هربار كه عملياتي صورت . را بنويسيد
تعداد رديفهاي تحت تاثير قرار گرفته را براي كاربر ارسال ميكند و همين باعث ايجاد SQLگرفته ،.ميشود client , serverترافيك بين
Stored Procedure & Trigger In SQL
Stored Procedureويرايش دستورات
Alter Procedure نام روال پارامتراول@) نوع داده پارامتر دوم@ , (...,نوع داده
As
Begin
SQLدستورات
13
ميتوانيم روال مورد نظر خود را ويرايش نمائيم Alterبا استفاده از کلمه کليدي
End
Stored Procedure & Trigger In SQL
Stored Procedureحذف
ميتوانيم روال مورد نظر خود را حذف نمائيم Dropبا استفاده از کلمه کليدي
Drop Procedureنام روال نام روال
14
Stored Procedure & Trigger In SQL
تريگر در واقع نوعي روال ذخيره شده است که در پاسخ به بروز يکي از شرايط زير اجرا خواهد شد
Insert
Delete
Update
Trigger ست؟يچ
Triggerانواع اجراي
16
اجرا ميشود و در تعريف آن از کلمه Insert/Delete/Updateتريگري که بعد از رويداد •
استفاده Afterبه جاي Forدر نسخه هاي قديمي از کلمه . (استفاده ميگرددAfterکليدي
)ميشده است
اجرا ميشود و در تعريف آن از کلمه کليدي Insert/Delete/Updateتريگري که به جاي •
Instead Of استفاده ميگردد
Triggerانواع اجراي
Stored Procedure & Trigger In SQL
شده و جهت درج SQL Serverوارد نرم افزار Query سپس به صورت زير . جديد اقدام ميکنيم
Trigger مورد نظر را ايجاد مينمائيم.
Triggerنحوه ايجاد
17
Create Trigger نام تريگرON After/InsteadOfنام جدول Insert/Update/Delete
As
Begin
SQLدستورات
End
Stored Procedure & Trigger In SQL
هاي ايجاد شده، ميتوانيد وارد Triggerجهت مشاهده
Objectشويد و در پنجره SQL Serverنرم افزار
Explorer از مسير زير اقدام فرماييد.
هاي ايجاد شدهTriggerمشاهده
18
DataBaesesè èعنوان پايگاه داده Tables
è èعنوان جدول Triggers
Stored Procedure & Trigger In SQL
Triggerجلوگيري از حذف رکورد توسط
Create Trigger Student_NoDelete ON Student Instead Of Delete
As
Begin
Print ‘Was Not Deleted’
19
End
يعني . ميباشد Delete Instead Ofايجاد ميشود و از نوع Studentتريگر باال روي جدول ، تريگر Deleteداده شود، به جاي دستور Studentزماني که دستور حذف يک رکورد از جدول
.نمايش داده ميشود Was Not Deletedباال اجرا ميگردد و پيغام
Stored Procedure & Trigger In SQL
جديدپس از درج رکوردStudentنمايش تعداد سطرهاي جدول
Create Trigger Student_Insert ON Student After Insert
As
Begin
Select Count(*) From Student
20
End
اجرا ميشود و تعداد سطرهاي جدول را Studentتريگر باال بعد از درج رکورد در جدول .برميگرداند
Stored Procedure & Trigger In SQL
شدهDeleteنمايش رکوردهاي
Create Trigger Student_Delete ON Student After Delete
As
Begin
Select * From Deleted
21
End
اجرا ميشود و رکوردهاي حذف شده را نمايش Studentتريگر باال بعد از حذف رکورد در جدول .ميدهد
، رکوردهاي حذف شده در جدول Deleteالزم به ذکر است که در تريگرها، پس از عمليات Deleted و پس از عملياتInsert رکودهاي درج شده در جدول ،Inserted قرار ميگيرد.
Stored Procedure & Trigger In SQL
شدهUpdateنمايش رکوردهاي
Create Trigger Student_Update ON Student After Update
As
Begin
Select * From Deleted
22
End
داده هاي (اجرا ميشود و داده هاي قديمي Studentتريگر باال بعد از بروزرساني رکورد در جدول .را نمايش ميدهد) قبل از بروزرساني
Deleted، داده هاي قديمي در جدول Updateالزم به ذکر است که در تريگرها، پس از عمليات .قرار ميگيرد Insertedدر جدول ) داده هاي جايگزين شده(و داده هاي جديد
Stored Procedure & Trigger In SQL
جلوگيري از اعمال تغييرات روي پايگاه داده
Create Trigger DataBase_MyTrigger ON DataBaseAfter Drop_Table,Create_Table,Alter_Table,Create_Procedure,
Alter_Procedure, Drop_Procedure, Drop_Trigger, Create_Trigger, Alter_Trigger, Drop_View, Create_View, Alter_View
ASBegin
PRINT ' ’شما نمي توانيد تغييراتي در پايگاه ايجاد کنيدROLLBACk
23
ROLLBACkEnd
اجرا ميشود و مانع از انجام تغييرات در پاياه داده ميگردد DataBaseتريگر باال روي
Stored Procedure & Trigger In SQL
Triggerغير فعال کردن
Disable Trigger نام تريگر ON نام جدول
Disable Trigger Student_Delete ON Student
:مثال
24
Triggerفعال کردن
Enable Trigger نام تريگر ON نام جدول
Enable Trigger Student_Delete ON Student
:مثال
Stored Procedure & Trigger In SQL
هاي يک جدول Triggerغير فعال کردن
Alter Table نام جدول Disable Trigger All
Alter Table Student Disable Trigger All
:مثال
25
هاي يک جدول Triggerفعال کردن
Alter Table نام جدول Enable Trigger All
Alter Table Student Enable Trigger All
:مثال
Stored Procedure & Trigger In SQL
Triggerويرايش
Alter Trigger نام تريگرON After/InsteadOfنام جدول Insert/Update/Delete
As
Begin
SQLدستورات
26
SQLدستورات
End
تريگر مورد نظر خود را ويرايش نمائيمميتوانيم Alterبا استفاده از کلمه کليدي
Stored Procedure & Trigger In SQL
Triggerحذف
ميتوانيم تريگر مورد نظر خود را حذف نمائيم Dropبا استفاده از کلمه کليدي
نام تريگر Drop Triggerنام تريگر
27
Stored Procedure & Trigger In SQL 28
مهندس سيروسيان و مهندس : مترجم. رايان استنفز: نويسنده. روز 21در SQLکتاب آموزش •
ابراهيمي
مدحجمهندس محسن : نويسنده. Visual Studio .NET 2010در VB.NETکتاب آموزش •
منابع