Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. ·...

28
Stored Procedure & Trigger In SQL 1 ﻣﻬﻨﺪﺱ ﺯﻭﺍﺭ ﻣﺤﻤﺪ[email protected]

Transcript of Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. ·...

Page 1: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure&

TriggerIn

SQL

1

SQL

محمد زوارمهندس [email protected]

Page 2: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

Stored Procedure ھا

2

Stored Procedure ھا

Page 3: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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شرکت

د جداول و ايندکس ها، پس از ساخته شدن، در پايگاه داده ها ذخيره ناين روال ها مان. کار برد

. ميشوند

Page 4: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

•Precompiled بودن آنها به اين معني که به زبان ماشين بسيار نزديک شده و به طور کامل از. اول ترجمه نميشود ، اين امر باعث افزايش سرعت بارگزاري مي گردد

. قابليت ذخيره داشته و ميتوان از يک رويه چندين بار در کد نويسي استفاده کرد •)حرفه اي ايجاد کنيد Queryميتوانيد به سادگي يک (مي باشد Queryداراي ويرايشگر •

:عبارت است از Stored Procedureبرخي از قابليت هاي رويه هاي ذخيره شده يا

4

Page 5: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

. جلوگيري مي کند SQLهست و از خطاهاي Syntax Parserداراي •در بسياري موارد SQL Injectionداراي امنيت بااليي است و از هک شدن سايت شما توسط •

. جلوگيري مي کند . را پشت سرهم داراست SQLقابليت درج چندين دستور •. قابليت ارسال ورودي و خروجي دارد •. دارد TransactSQLبه زبان ...) شرط ، حلقه و( قابليت برنامه نويسي •

5

. دارد TransactSQLبه زبان ...) شرط ، حلقه و( قابليت برنامه نويسي •.....و

Page 6: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

شده و جهت درج SQL Serverوارد نرم افزار Query سپس به صورت زير . جديد اقدام ميکنيم

Stored Procedure مورد نظر را ايجاد.مينمائيم

Stored Procedureنحوه ايجاد

6

Create Procedure نام روال پارامتراول@) نوع داده پارامتر دوم@ , (...,نوع داده

As

Begin

SQLدستورات

End

Page 7: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

هاي ايجاد شده، Stored Procedureجهت مشاهده

شويد و در SQL Serverميتوانيد وارد نرم افزار

از مسير زير اقدام Object Explorerپنجره

.فرماييد

هاي ايجاد شده Stored Procedureمشاهده

7

DataBaesesè èعنوان پايگاه دادهProgrammability è Stored Procedures

Page 8: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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اينجا تعداد رکوردهاي حاصل از دستور

Page 9: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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@پارامتر .داده خواهد شد

Page 10: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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 در نظر گرفته شده است اشاره ميکند

Page 11: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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الزم به ذکر است که اجراي

Page 12: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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ترافيك بين

Page 13: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

Stored Procedureويرايش دستورات

Alter Procedure نام روال پارامتراول@) نوع داده پارامتر دوم@ , (...,نوع داده

As

Begin

SQLدستورات

13

ميتوانيم روال مورد نظر خود را ويرايش نمائيم Alterبا استفاده از کلمه کليدي

End

Page 14: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

Stored Procedureحذف

ميتوانيم روال مورد نظر خود را حذف نمائيم Dropبا استفاده از کلمه کليدي

Drop Procedureنام روال نام روال

14

Page 15: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

Trigger ھا

15

Trigger ھا

Page 16: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

تريگر در واقع نوعي روال ذخيره شده است که در پاسخ به بروز يکي از شرايط زير اجرا خواهد شد

Insert

Delete

Update

Trigger ست؟يچ

Triggerانواع اجراي

16

اجرا ميشود و در تعريف آن از کلمه Insert/Delete/Updateتريگري که بعد از رويداد •

استفاده Afterبه جاي Forدر نسخه هاي قديمي از کلمه . (استفاده ميگرددAfterکليدي

)ميشده است

اجرا ميشود و در تعريف آن از کلمه کليدي Insert/Delete/Updateتريگري که به جاي •

Instead Of استفاده ميگردد

Triggerانواع اجراي

Page 17: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

شده و جهت درج SQL Serverوارد نرم افزار Query سپس به صورت زير . جديد اقدام ميکنيم

Trigger مورد نظر را ايجاد مينمائيم.

Triggerنحوه ايجاد

17

Create Trigger نام تريگرON After/InsteadOfنام جدول Insert/Update/Delete

As

Begin

SQLدستورات

End

Page 18: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

هاي ايجاد شده، ميتوانيد وارد Triggerجهت مشاهده

Objectشويد و در پنجره SQL Serverنرم افزار

Explorer از مسير زير اقدام فرماييد.

هاي ايجاد شدهTriggerمشاهده

18

DataBaesesè èعنوان پايگاه داده Tables

è èعنوان جدول Triggers

Page 19: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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باال اجرا ميگردد و پيغام

Page 20: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

جديدپس از درج رکوردStudentنمايش تعداد سطرهاي جدول

Create Trigger Student_Insert ON Student After Insert

As

Begin

Select Count(*) From Student

20

End

اجرا ميشود و تعداد سطرهاي جدول را Studentتريگر باال بعد از درج رکورد در جدول .برميگرداند

Page 21: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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 قرار ميگيرد.

Page 22: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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در جدول ) داده هاي جايگزين شده(و داده هاي جديد

Page 23: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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تريگر باال روي

Page 24: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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

:مثال

Page 25: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

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

:مثال

Page 26: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

Triggerويرايش

Alter Trigger نام تريگرON After/InsteadOfنام جدول Insert/Update/Delete

As

Begin

SQLدستورات

26

SQLدستورات

End

تريگر مورد نظر خود را ويرايش نمائيمميتوانيم Alterبا استفاده از کلمه کليدي

Page 27: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL

Triggerحذف

ميتوانيم تريگر مورد نظر خود را حذف نمائيم Dropبا استفاده از کلمه کليدي

نام تريگر Drop Triggerنام تريگر

27

Page 28: Stored Proceure Triggerbayanbox.ir/view/5271010857873033186/Stored-Proceure... · 2014. 12. 12. · Stored Procedure & Trigger In SQL ﻲﻳﺎﻴﺷﺍ ﻪﮐ ﺪﺷﺎﺒﻴﻣ

Stored Procedure & Trigger In SQL 28

مهندس سيروسيان و مهندس : مترجم. رايان استنفز: نويسنده. روز 21در SQLکتاب آموزش •

ابراهيمي

مدحجمهندس محسن : نويسنده. Visual Studio .NET 2010در VB.NETکتاب آموزش •

منابع