How STORED PROCEDURE works in SQL? Best STORED PROCEDURE examples

How STORED PROCEDURE works in SQL? Best STORED PROCEDURE examples

When working with SQL databases, efficiency and performance are crucial. Writing repetitive queries can be tedious and inefficient. This is where stored procedures come in. Stored procedures in SQL allow us to encapsulate complex SQL logic into reusable, precompiled code blocks, improving performance and maintainability.

What is a Stored Procedure in SQL?

A stored procedure is a set of SQL statements that are stored in the database and can be executed as a unit. Instead of writing the same queries repeatedly, I can define a procedure once and call it whenever needed. This improves efficiency and reduces the risk of errors in query formulation.

Key Benefits of Using Stored Procedures

Stored procedures offer several advantages, making them an essential tool for developers and database administrators:

  • Performance Improvement: Since stored procedures are precompiled, execution time is reduced.
  • Code Reusability: Define the procedure once and use it multiple times without rewriting code.
  • Security: Provides controlled access to data by restricting permissions to stored procedures instead of direct table access.
  • Reduced Network Traffic: Sending a stored procedure call is more efficient than passing multiple queries over the network.
  • Maintainability: Easier to manage and modify complex logic in a single location rather than updating multiple queries across different parts of an application.

How Does a Stored Procedure Work?

A stored procedure works by performing operations on database data using SQL statements. These operations can include inserting, updating, deleting, or retrieving records. Stored procedures can take parameters as inputs and return values or datasets as outputs.

Basic Syntax of a Stored Procedure

Creating a stored procedure is straightforward. Below is the basic syntax:

CREATE PROCEDURE procedure_name
AS
BEGIN
    -- SQL statements go here
END;

To execute a stored procedure, I use the EXEC or EXECUTE command.

EXEC procedure_name;

Best Stored Procedure Examples

Let’s explore some practical stored procedure examples to understand how they work in real-world scenarios.

Example 1: Simple Stored Procedure to Retrieve Data

Suppose I have a table called Employees, and I want a stored procedure to retrieve all employee records.

CREATE PROCEDURE GetAllEmployees
AS
BEGIN
    SELECT * FROM Employees;
END;

Executing the procedure:

EXEC GetAllEmployees;

Example 2: Stored Procedure with Parameters

Let’s say I need to filter employees by department. I can create a stored procedure that accepts a department ID as a parameter.

CREATE PROCEDURE GetEmployeesByDepartment
@DepartmentID INT
AS
BEGIN
    SELECT * FROM Employees WHERE DepartmentID = @DepartmentID;
END;

Executing the procedure with a parameter:

EXEC GetEmployeesByDepartment @DepartmentID = 3;

Example 3: Stored Procedure for Inserting Data

To streamline data insertion, I use a stored procedure that accepts multiple parameters.

CREATE PROCEDURE AddEmployee
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@DepartmentID INT
AS
BEGIN
    INSERT INTO Employees (FirstName, LastName, DepartmentID)
    VALUES (@FirstName, @LastName, @DepartmentID);
END;

Executing an INSERT statement using the stored procedure:

EXEC AddEmployee @FirstName = 'John', @LastName = 'Doe', @DepartmentID = 2;

Example 4: Stored Procedure with Output Parameter

Stored procedures can also return output values. Here’s an example that returns the total number of employees in a department.

CREATE PROCEDURE GetEmployeeCountByDepartment
@DepartmentID INT,
@EmployeeCount INT OUTPUT
AS
BEGIN
    SELECT @EmployeeCount = COUNT(*) FROM Employees WHERE DepartmentID = @DepartmentID;
END;

Executing the procedure and retrieving the output:

DECLARE @Count INT;
EXEC GetEmployeeCountByDepartment @DepartmentID = 2, @EmployeeCount = @Count OUTPUT;
PRINT @Count;

Example 5: Handling Transactions in Stored Procedures

Stored procedures support transactions for ensuring database consistency. Here’s an example:

CREATE PROCEDURE TransferFunds
@SourceAccount INT,
@DestinationAccount INT,
@Amount DECIMAL(10,2)
AS
BEGIN
    BEGIN TRANSACTION;

    UPDATE Accounts SET Balance = Balance - @Amount WHERE AccountID = @SourceAccount;
    UPDATE Accounts SET Balance = Balance + @Amount WHERE AccountID = @DestinationAccount;

    IF @@ERROR <> 0
        ROLLBACK TRANSACTION;
    ELSE
        COMMIT TRANSACTION;
END;

Executing the transaction-based procedure:

EXEC TransferFunds @SourceAccount = 1, @DestinationAccount = 2, @Amount = 500.00;

Difference Between Stored Procedure and Function

Although both stored procedures and functions encapsulate SQL logic, they serve different purposes. Here’s a comparison:

Feature Stored Procedure Function
Can return multiple values? Yes No (can return only a single value or table)
Can include DML (INSERT, UPDATE, DELETE)? Yes No (only SELECT statements allowed)
Can be executed directly? Yes, using EXEC No, must be used within a SELECT or another SQL statement
Supports transactions? Yes No

Best Practices for Using Stored Procedures

To maximize the benefits of stored procedures, I follow these best practices:

  1. Use meaningful names: Procedure names should clearly indicate their functionality.
  2. Minimize business logic: Keep procedures focused on database operations and avoid complex business logic.
  3. Use parameters: Reduce hardcoded values by using parameters for flexibility.
  4. Optimize queries: Use indexes and efficient SQL methods to enhance performance.
  5. Avoid excessive nesting: Too many nested procedures can lead to performance issues.
  6. Handle errors properly: Implement proper error handling and transaction management.

Conclusion

Stored procedures are a powerful tool for improving database performance, reusability, and security. They simplify complex database operations and make applications more efficient. By following best practices and leveraging stored procedures effectively, I can optimize SQL database interactions for both small and large-scale applications.

 

Other interesting article:

How WINDOW FUNCTIONS works in SQL? Best WINDOW FUNCTIONS examples