نوشتن منطق قابل استفادهی مجدد در دیتابیس
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 بهره بگیرید.