Let’s consider a table Products:

Table Schema

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName NVARCHAR(100),
    Price DECIMAL(10, 2),
    Stock INT
);

Sample Data

ProductIDProductNamePriceStock
1Laptop1200.0010
2Smartphone800.0025
3Headphones150.0050
4Monitor300.0020

1. Stored Procedure Example

Scenario: Get products with stock greater than a given value.

Stored Procedure:

CREATE PROCEDURE GetProductsByStock
    @MinStock INT
AS
BEGIN
    SET NOCOUNT ON;
 
    SELECT ProductID, ProductName, Price, Stock
    FROM Products
    WHERE Stock > @MinStock;
END

Usage:

-- Call stored procedure to get products with stock greater than 15
EXEC GetProductsByStock @MinStock = 15;

Result:

ProductIDProductNamePriceStock
2Smartphone800.0025
3Headphones150.0050
4Monitor300.0020

2. Function Example

Scenario: Calculate the total value of stock for a product.

Function:

CREATE FUNCTION GetTotalStockValue
(
    @ProductID INT
)
RETURNS DECIMAL(10, 2)
AS
BEGIN
    DECLARE @TotalValue DECIMAL(10, 2);
 
    SELECT @TotalValue = Price * Stock
    FROM Products
    WHERE ProductID = @ProductID;
 
    RETURN @TotalValue;
END

Usage:

-- Call the function to get total stock value for ProductID = 2
SELECT dbo.GetTotalStockValue(2) AS TotalStockValue;

Result:

TotalStockValue
20000.00

Key Differences Demonstrated

FeatureStored Procedure ExampleFunction Example
Return ValueNo return value, just SELECT dataReturns a single value
Input/Output ParametersInput parameter (@MinStock)Only input parameter (@ProductID)
Usage in SELECT/WHERECan’t use SP in SELECTCan use UDF in SELECT
Transaction SupportSupportedNot supported

Functions follow the computer-science definition in that they MUST return a value and cannot alter the data they receive as parameters (the arguments). Functions are not allowed to change anything, must have at least one parameter, and they must return a value. Stored procs do not have to have a parameter, can change database objects, and do not have to return a value.