رویههای ذخیره شده (Stored Procedures) در SQL Server چیست؟
رویۀ ذخیره شده مجموعهای از یک یا چند دستور SQL است که در سرور SQL ذخیره میشود. این رویهها به شما امکان میدهند تا عملیات پیچیده را به صورت یکبار تعریف و بارها اجرا کنید و از مزایای متعددی برخوردارند.
مزایای استفاده از رویههای ذخیره شده:
پیشکامپایل و کش شدن برنامه اجرا: رویههای ذخیره شده یکبار کامپایل میشوند و برنامه اجرای آنها در کش ذخیره میشود، بنابراین اجرای مجدد سریعتر است.
کپسولهسازی قوانین کسبوکار: مدیر پایگاه داده میتواند رویهها را تعریف کند و کاربران مختلف (مثلاً از زبانهای برنامهنویسی JAVA، C#، Python و R) به آنها دسترسی داشته باشند.
کاهش حجم ارسال کد: به جای ارسال صدها خط کد، تنها نام رویه را فراخوانی میکنید که باعث کاهش ترافیک شبکه میشود.
دسترسی امنتر و یکنواخت به دادهها: رویهها به شکل استاندارد و امن به اشیاء پایگاه داده دسترسی میدهند.
صرفهجویی در پهنای باند شبکه: کاهش آسیبپذیریها و تأخیرهای شبکه.
ساختار کلی رویه ذخیره شده در SQL Server
CREATE [OR ALTER] PROCEDURE [Schema_Name].Procedure_Name
@Parameter_Name Data_type,
...
AS
BEGIN
-- دستورات SQL مانند SELECT، INSERT، UPDATE، DELETE
END
Schema_Name: نام اسکیمای پایگاه داده (مثلاً dbo).
Procedure_Name: نام رویه که باید معنادار و غیرتکراری باشد.
@Parameter_Name: پارامترهای ورودی با نوع داده مشخص.
نحوه ایجاد رویه ذخیره شده
با استفاده از SQL Server Management Studio (SSMS)
به مسیر Database -> Programmability -> Stored Procedures بروید.
روی پوشه Stored Procedures راستکلیک و گزینه New -> Stored Procedure را انتخاب کنید.
در پنجره باز شده، نام رویه، پارامترها و دستورات SQL را وارد کنید.
با استفاده از دستور SQL
مثال ایجاد رویهای برای انتخاب تمام رکوردهای جدول Employee:
CREATE PROCEDURE SelectingAllRecordsInEmployee
AS
BEGIN
SET NOCOUNT ON;
SELECT [FirstName], [LastName], [Education], [Occupation], [YearlyIncome], [Sales], [HireDate]
FROM [Employee]
END
GO
اجرای رویه ذخیره شده
از طریق SSMS
روی رویه مورد نظر راستکلیک و گزینه Execute را انتخاب کنید. اگر پارامتر داشته باشد، مقادیر را وارد و اجرا کنید.
با دستور EXEC
EXEC [dbo].[SelectingAllRecordsInEmployee]
تغییر نام رویه ذخیره شده
SQL Server امکان تغییر نام مستقیم رویه را ندارد. برای تغییر نام باید رویه قبلی را حذف (DROP) و رویه جدید با نام جدید ایجاد کنید:
IF OBJECT_ID('SelectingAllRecordsInEmployee', 'P') IS NOT NULL
DROP PROCEDURE SelectingAllRecordsInEmployee;
GO
CREATE PROCEDURE SelectingEmployeeRecords
AS
BEGIN
SET NOCOUNT ON;
SELECT [FirstName], [LastName], [Education], [Occupation], [YearlyIncome], [Sales], [HireDate]
FROM [Employee]
END
GO
تغییر رویه ذخیره شده
با SSMS
روی رویه راستکلیک و گزینه Modify را انتخاب کنید، سپس تغییرات را اعمال و اجرا کنید.
با دستور ALTER PROCEDURE
ALTER PROCEDURE [dbo].[SelectingEmployeeRecords]
AS
BEGIN
SET NOCOUNT ON;
SELECT [FirstName], [LastName], [Education], [Occupation] AS Profession, [YearlyIncome], [Sales]
FROM [Employee]
END
GO
حذف رویه ذخیره شده
با SSMS
روی رویه راستکلیک و گزینه Delete را انتخاب کنید.
با دستور DROP PROCEDURE
IF OBJECT_ID('SelectingEmployeeRecords', 'P') IS NOT NULL
DROP PROCEDURE SelectingEmployeeRecords;
GO
بهترین شیوهها در استفاده از رویههای ذخیره شده
همیشه از نام اسکیمای پایگاه داده استفاده کنید (مثلاً dbo).
به جای SELECT *، ستونهای مورد نیاز را مشخص کنید.
برای ستونها مقدار پیشفرض (DEFAULT) تعیین کنید تا از NULL جلوگیری شود.
در جداول موقت، به صراحت مشخص کنید که ستونها NULL میپذیرند یا نه.
دادههای غیرضروری را استخراج یا درج نکنید تا کارایی افزایش یابد.
از دستور SET NOCOUNT ON برای کاهش پیامهای اضافی استفاده کنید.
در صورت امکان، UNION ALL را به جای UNION به کار ببرید مگر اینکه نیاز به حذف تکراریها باشد.
از توابع اسکالر در SELECT که روی دادههای زیاد اعمال میشوند، پرهیز کنید.
برای مدیریت خطاها از TRY CATCH استفاده کنید.
تراکنشها را کوتاه نگه دارید و از BEGIN..COMMIT TRANSACTION استفاده کنید.
نمونه کد کامل ایجاد رویه ذخیره شده
IF OBJECT_ID('SelectingEmployeeRecords', 'P') IS NOT NULL
DROP PROCEDURE SelectingEmployeeRecords;
GO
CREATE PROCEDURE SelectingEmployeeRecords
AS
BEGIN
SET NOCOUNT ON;
SELECT [FirstName], [LastName], [Education], [Occupation], [YearlyIncome], [Sales], [HireDate]
FROM [Employee]
END
GO
دیدگاهتان را بنویسید