Stored procedures
در این درس از دوره آموزشی SQL Server، به مفهوم Stored Procedures و نحوه ایجاد و استفاده از آنها پرداخته شده است. Stored Procedure یک ماژول از پیش تعریفشده در پایگاه داده است که مجموعهای از دستورات SQL را بهصورت کامپایلشده ذخیره میکند و امکان اجرای سریعتر و بهینهتر کوئریها را فراهم میآورد. در این درس، با استفاده از دستور CREATE PROCEDURE
، یک رویه ذخیرهشده به نام topSalesPerson
برای بازگرداندن اطلاعات فروشندهای با بالاترین فروش سالانه ایجاد شده است. همچنین روش اجرای این رویه با استفاده از دستور EXEC
توضیح داده شده است. این درس بهطور خاص به مزایای Stored Procedures، از جمله بهبود عملکرد، امنیت بیشتر، و قابلیت استفاده مجدد از کد، میپردازد و کاربرد عملی آن را در مدیریت دادههای پیچیده در محیط SQL Server بررسی میکند.
مورد بعدی که ما به اون میپردازیم و با نام AdventureWorks در زیر Database قرار گرفته، بخش برنامه ریزی است که در واقع به آن Programmability میگویند.
بنابراین اگر ما لیست AdventureWorks2014 رو باز کنیم در نیمه پایین، قابلیت برنامه ریزی رو با نام Programmability میبینیم. این کلمه کمی غیرمعمول بنظر میرسد و این واژه، از کلمات بیرون از مایکروسافت و یا یکی از اون کلمههایی که خیلی اوقات در کار روزمره تخصصی خودتان استفاده میکنید، نیست. اما مایکروسافت خیلی قدرتمند است. من حدس میزنم اونها میتوانند کلماتی رو که به آنها نیاز دارند خودشان تولید کنند. در sql server قابلیت برنامه ریزی یا در واقع Programmability، با قابلیت انواع متفاوت از موضوعات خاص با گردآوری برخی عملکردها، وجود دارد. بنابراین من میخواهم پیش بروم و برخی از کدها رو بنویسم که اون کدهای من، کد کامپایل محسوب بشود. کامپایل یا همگردانی یکی از اصطلاحات دانش رایانه هست. در واقع ترجمه کامل کد منبع از یک زبان سطح بالا به کد شیء، پیش از اجرا برنامه همگردانی یا کامپایل میگویند. به بیان سادهتر، کامپایلر برنامهای است که یک برنامه نوشته شده در یک زبان ساخت یافته را میخواند و به یک برنامه مقصد تبدیل میکند و مهمترین ویژگیای که در این تبدیل وجود دارد، این هست که، وجود خطا در برنامه مبدأ رو اعلام میکند. در واقع کدی که کامپایل میشود برخی عملکردها رو به ما میدهد که چند لحظه دیگر در مورد آن صحبت خواهیم کرد.
اگر لیست درختی قابلیت برنامه ریزی یا همان Programmability رو باز کنم، اولین چیزی که میبینم Stored Procedures هست و Stored Procedures پایهای ترین و رایج ترین آیتم Programmability یا همان برنامه ریزی است. من برخی کدها رو که مربوط به نحوه ایجاد Stored Procedures میشود را از قبل برای شما آماده کردم. پس جلو میروم و یکی از Stored Procedures هایی که داریم رو ایجاد میکنم.
در فایل های تمرینی این فصل، همه کدهای موجود در فایل تکست رو کپی میکنیم و اونها رو در یک new query پاست میکنم.
قبل از اینکه اون رو اجرا کنم، اجازه بدهید که نگاهی به کدها داشته باشیم و اونها رو کمی بررسی کنیم.
در این خط کلمه کلیدی create و procedure وجود دارد. بنابراین این چیزها از طریق sql server هم Stored Procedure نامیده میشوند. زمانی که می خواهیم یک چیزی رو ایجاد کنیم از کلمه stored استفاده نمیکنیم و همانطور که میبینید فقط از کلمه Procedure استفاده میکنیم. خب پس اینطوری شروع میشود CREATE PROCEDURE و بعد با نام Stored Procedure ذخیره میشود که هیچ تأثیری در عملکرد ندارد و فقط برخی چیزها رو برای ما یادآور میشود.
خب؛ در خط بعد کلمه کلیدی as و سپس در زیر اون یعنی خط سه، فقط یک دستور پایهای select وجود دارد. بنابراین ما بالاترین رو انتخاب کردیم یعنی TOP 1، به عبارت دیگر، ما تنها یک رکورد انتخاب کردیم و خواستیم ستونهایی رو بعدش برای ما لیست کند.
سپس بند FROM Sales.vSalesPerson رو اضافه میکنیم. vSalesPerson یک view هست. همان طور که در فصل هفتم گفتیم در SQL یک View یک جدول مجازی است که نتیجه حاصل از عبارات و دستورات SQL رو به ما نشان میدهد. یک view شامل سطر و ستونهایی دقیقاً شبیه یک جدول واقعی هست و اگر یادتان باشد فیلدها در یک View فیلدهایی هستند که از یک یا چند جدول واقعی در پایگاه داده گرفته شده اند. اکنون vSalesPerson یک View ای که برخی جزئیات رو راجب فروش افراد شبیه firstname و lastname و saleytd دارد و سپس می بینید که من در یک بند order by قرارشان میدهم به اینصورت، ORDER BY SalesYTD DESC.
بنابراین اولین رکوردی که برگردانده میشود برای اون شخصی خواهد بود که بالاترین SalesYTD رو دارد و این دلیل این است که چرا این Stored Procedure، topSalesPerson گفته میشود. من میخواهم یک رکورد برگردانم، رکوردی که نماینده از فردی است، که در سال بیشترین فروش رو تا به امروز داشته.
بنابراین جلو میروم و این رو با گزینه Execute اجرا میکنم و پیامCommand(s) completed successfully رو خواهم دید.
در سمت چپ زیر گزینه Stored Procedures به نظر نمیرسد چیز جدیدی اضاف شده باشد.
من راست کلیک میکنم و روی رفرش کلیک میکنم که باید دقیقاً در اینجا topSalesPerson رو ببینم.
برای اجرا کردن این Stored Procedure، میخواهم که query جدیدی رو باز کنم. همانطور که میدانید حالا باید تایپ کنم execute، بعدش هم فقط بر روی dbo.topSalesPerson که Stored Procedure جدید من را محسوب میشود، کلیک کنم و برای ادامه کارم کافی است خیلی راحت اون رو در حالی که کلیک چپ ماوس من پایین است درگش کنم داخله کوئری ام.
الان می بینید که میخواهم topSalesPerson رو اجرا کنم.
روی علامت تعجب قرمز کلیک میکنم و همانطور که انتظار داشتم میبینم که یک رکورد رو برمیگرداند و اون رکورد بالاترین مقدار رو برای SalesYTD دارد. بنابراین می بینیم که همان عملکردی که انتظارش رو داشتیم برای ما بنمایش درآمد.
اجازه بدهید به عقب برگردیم و به جایی برویم که یک کد برای Procedure تعریف کردیم.
یک Stored Procedure میتواند بخشی از یک دستور معتبر SQL باشد. بنابراین همانطور که می بینید اینجا من آمدم و یک دستورSELECT رو بعنوان یک دستور معتبر sql انتخاب کردم و اون رو انجام دادم. شما همچنین میتوانید یک دستور از INSERT رو انجام بدهید یا یک دستور شبیه UPDATE یا یک دستور DELETE. همچنین ترکیب تعداد زیاد از دستورات معتبر SQL میتواند یک قسمتی از یک Stored Procedure باشد.