فصل دوم: کوئری‌نویسی پیشرفته

Stored Procedure و Function

نوشتن منطق قابل استفاده‌ی مجدد در دیتابیس

Stored Procedure مجموعه‌ای از دستورات T-SQL است که یک‌بار روی سرور تعریف می‌شود و می‌توان آن را بارها با پارامترهای مختلف فراخوانی کرد. این کار باعث کاهش ترافیک شبکه، افزایش امنیت (با محدود کردن دسترسی مستقیم به جدول) و امکان استفاده‌ی مجدد از منطق مشترک می‌شود.

CREATE PROCEDURE GetOrdersByCustomer
    @CustomerId INT
AS
BEGIN
    SELECT Id, Total, CreatedAt
    FROM Orders
    WHERE CustomerId = @CustomerId
    ORDER BY CreatedAt DESC;
END;

فراخوانی این Stored Procedure با دستور EXEC انجام می‌شود:

EXEC GetOrdersByCustomer @CustomerId = 5;

در مقابل، Function (تابع اسکالر یا جدولی) مقداری را برمی‌گرداند و می‌توان آن را مستقیماً در یک عبارت SELECT استفاده کرد؛ Stored Procedure چنین امکانی ندارد:

CREATE FUNCTION dbo.GetDiscountedPrice (@Price DECIMAL(10,2), @DiscountPercent INT)
RETURNS DECIMAL(10,2)
AS
BEGIN
    RETURN @Price - (@Price * @DiscountPercent / 100);
END;

SELECT Name, dbo.GetDiscountedPrice(Price, 10) AS FinalPrice FROM Products;

یک قاعده‌ی کلی برای انتخاب بین این دو این است: اگر نیاز به اجرای چند دستور، تراکنش یا تغییر داده دارید از Stored Procedure استفاده کنید؛ اگر فقط یک مقدار محاسبه‌شده در دل کوئری نیاز دارید، از Function بهره بگیرید.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.