存储过程是一组预编译的SQL语句,以及流程控制语句,封装在数据库服务器中并可以被重复调用。它们可以接收参数、执行逻辑和返回结果。存储过程通常用于实现复杂的业务逻辑和数据操作,提供了以下几个主要优势:
获取特定客户的信息,包括客户姓名、电话号码和地址。
CREATE PROCEDURE GetCustomerInfo
@CustomerID INT
AS
BEGIN
SELECT
CustomerName,
PhoneNumber,
Address
FROM Customers
WHERE CustomerID = @CustomerID;
END;
无
EXEC GetCustomerInfo @CustomerID = 123;
下面是一个示例的复杂存储过程代码,该存储过程用于计算订单总金额并更新订单状态:
CREATE PROCEDURE CalculateOrderTotalAndSetStatus
@OrderID INT
AS
BEGIN
DECLARE @TotalAmount DECIMAL(10, 2);
DECLARE @ItemCount INT;
DECLARE @OrderStatus VARCHAR(20);
-- 计算订单总金额
SELECT @TotalAmount = SUM(UnitPrice * Quantity)
FROM OrderDetails
WHERE OrderID = @OrderID;
-- 获取订单中商品数量
SELECT @ItemCount = COUNT(*)
FROM OrderDetails
WHERE OrderID = @OrderID;
-- 根据订单总金额和商品数量设置订单状态
IF @TotalAmount > 1000
SET @OrderStatus = 'High Value';
ELSE
SET @OrderStatus = 'Normal';
-- 更新订单信息表中的订单状态和总金额
UPDATE Orders
SET TotalAmount = @TotalAmount,
ItemCount = @ItemCount,
Status = @OrderStatus
WHERE OrderID = @OrderID;
PRINT 'Order total amount calculated and status updated successfully.';
END;
在上面的示例中,存储过程CalculateOrderTotalAndSetStatus接收一个订单ID作为输入参数,然后执行以下操作:
在存储过程中可以包含多个select语句,显示姓名中含有”张“字职工信息及其所在的仓库信息,
create procedure pro_sql5
as
begin
select * from 职工 where 姓名 like '%张%'
select * from 仓库 where 仓库号 in(select 仓库号 from 职工 where 姓名 like '%张%')
end
go
execute pro_sql5
带有输入参数的存储过程 找出三个数字中的最大数:
create proc proc_sql6
@num1 int,
@num2 int,
@num3 int
as
begin
declare @max int
if @num1>@num2
set @max = @num1
else set @max = @num2
if @num3 > @max
set @max = @num3
print '3个数中最大的数字是:' + cast(@max as varchar(20))
end
求阶乘之和 如6! + 5! + 4! + 3! + 2! + 1
execute proc_sql7 6
带有输入参数的数据查询功能的存储过程
create proc proc_sql8
@mingz int,
@maxgz int
as
begin
select * from 职工 where 工资>@mingz and 工资<@maxgz
end
带输入和输出参数的存储过程:显示指定仓库号的职工信息和该仓库号的最大工资和最小工资
create proc proc_sql9
@cangkuhao varchar(50),
@maxgz int output,
@mingz int output
as
begin
select * from 职工 where 仓库号=@cangkuhao
select @maxgz=MAX(工资) from 职工 where 仓库号=@cangkuhao
select @mingz=MIN(工资) from 职工 where 仓库号=@cangkuhao
end
带有登录判断功能的存储过程
create proc proc_sql10
@hyuer varchar(50),
@hypwd varchar(50)
as
begin
if @hyuer = 'hystu1'
begin
if @hypwd = '1111'
print '用户名和密码输入正确'
else
print '密码输入错误'
end
else if @hyuer = 'hystu2'
begin
if @hypwd = '2222'
print '用户名和密码输入正确'
else
print '密码输入错误'
end
else if @hyuer = 'hystu3'
begin
if @hypwd = '3333'
print '用户名和密码输入正确'
else
print '密码输入错误'
end
else
print '您输入的用户名不正确,请重新输入'
end
带有判断条件的插入功能的存储过程
reate proc proc_sq111
@zghao varchar(30),
@ckhao varchar(30),
@sname varchar(50),
@sex varchar(10),
@gz int
as
begin
if Exists(select * from 职工 where 职工号=@zghao)
print '该职工已经存在,请重新输入'
else
begin
if Exists(select * from 仓库 where 仓库号=@ckhao)
begin
insert into 职工(职工号, 仓库号, 姓名, 性别, 工资)
values(@zghao, @ckhao, @sname, @sex, @gz)
end
else
print '您输入的仓库号不存在,请重新输入'
end
end
各位看官》创作不易,点个赞!!!
诸君共勉:万事开头难,只愿肯放弃。
免责声明:本文章仅用于学习参考