<aside> ⚙️ Stored procedures are saved SQL code blocks that can be executed by name. They support parameters, variables, and error handling.
</aside>
-- Create
CREATE PROCEDURE GetCustomerSummary AS
BEGIN
SELECT COUNT(*) AS TotalCustomers, AVG(Score) AS AvgScore
FROM Sales.Customers
WHERE Country = 'USA';
END
GO
-- Execute
EXEC GetCustomerSummary;
ALTER PROCEDURE GetCustomerSummary
@Country NVARCHAR(50) = 'USA' -- default value
AS
BEGIN
SELECT COUNT(*) AS TotalCustomers, AVG(Score) AS AvgScore
FROM Sales.Customers
WHERE Country = @Country;
END
GO
-- Execute with different parameters
EXEC GetCustomerSummary @Country = 'Germany';
EXEC GetCustomerSummary @Country = 'USA';
EXEC GetCustomerSummary; -- uses default 'USA'
ALTER PROCEDURE GetCustomerSummary @Country NVARCHAR(50) = 'USA' AS
BEGIN
DECLARE @TotalCustomers INT, @AvgScore FLOAT;
SELECT @TotalCustomers = COUNT(*), @AvgScore = AVG(Score)
FROM Sales.Customers WHERE Country = @Country;
PRINT('Total: ' + CAST(@TotalCustomers AS NVARCHAR));
PRINT('Avg Score: ' + CAST(@AvgScore AS NVARCHAR));
END
GO
ALTER PROCEDURE GetCustomerSummary @Country NVARCHAR(50) = 'USA' AS
BEGIN
IF EXISTS (SELECT 1 FROM Sales.Customers WHERE Score IS NULL AND Country = @Country)
BEGIN
PRINT('Updating NULL scores to 0');
UPDATE Sales.Customers SET Score = 0
WHERE Score IS NULL AND Country = @Country;
END
ELSE
BEGIN
PRINT('No NULL scores found');
END;
END
GO
ALTER PROCEDURE GetCustomerSummary @Country NVARCHAR(50) = 'USA' AS
BEGIN
BEGIN TRY
-- Your SQL here...
SELECT COUNT(*) FROM Sales.Customers WHERE Country = @Country;
END TRY
BEGIN CATCH
PRINT('Error: ' + ERROR_MESSAGE());
PRINT('Line: ' + CAST(ERROR_LINE() AS NVARCHAR));
END CATCH;
END
GO