数据库设计 (存储过程设计)
6.存储过程设计
存储过程(Stored Procedure)是一组预先编译好的Transact-SQL语句。用户可以通过调用存储过程来执行其中的SQL语句。应用存储过程可以提高程序执行速度、使程序模块化、减少网络通信量和保证系统的安全性。
在SQL查询分析器中,输入指定的Transact-SQL语句可以创建存储过程。例如:
USE db_sell
GO
CREATE procedure P_ruku
@pzs int, --用于接收商品种数
@je money, --用于接收入库金额
@sf money, --用于接收实付金额
@gysname varchar(100), --用于接收供应商名称
@date datetime, --用于接收入库日期
@operator varchar(30), --用于接收操作员
@jsr varchar(30), --用于接收经手人
@jsfs varchar(10), --用于接收结算方式
@rukuid varchar(30) output --用于输出入库编号
as
begin
Declare @temp varchar(30) --提取游标中的数据
set @rukuid = 'RK'+ Convert(varchar(20),Year(@date))
if Month(@date)<10 --将月格式化为两位数字
set @rukuid = @rukuid +'0'+ Convert(varchar(20),Month(@date))
else
set @rukuid = @rukuid+Convert(varchar(20),Month(@date))
if Day(@date)<10 --将日格式化为两位数字
set @rukuid = @rukuid +'0'+ Convert(varchar(20),Day(@date))
else
set @rukuid = @rukuid+Convert(varchar(20),Day(@date))
--声明一个局部游标用于提取当前日期的最大入库编号
declare fetch_MaxPh Cursor LOCAL Scroll
for
select Max(rkid) from tab_ruku_main where rkdate>=
FLOOR(Convert(Float,@date)) and rkdate<Floor(Convert (Float,@date))+1
if CURSOR_STATUS('local','fetch_Maxph')= -1 --如果游标未打开,则打开游标
Open fetch_Maxph
Fetch first from fetch_Maxph into @temp
Close fetch_Maxph
Declare @Id Int
if @temp is NUll
begin
set @rukuid = @rukuid+'001'
end
else
begin --确定入库编号后3位数字的显示格式
set @id = Convert(int,SUBSTRING(Rtrim(@temp),11,10))
if @id <9
set @rukuid = @rukuid +'00'+Convert(varchar(20),@id+1)
else if @id <99
set @rukuid = @rukuid +'0'+Convert(varchar(20),@id+1)
else
set @rukuid = @rukuid + Convert(varchar(20),@id+1)
end
--将接收到的数据添加到tab_ruku_main表中
insert into tab_ruku_main values (@rukuid,@pzs,@je,@sf,
@gysname,@date,@operator,@jsr,@jsfs)
end
GO
名为P_ruku的存储过程是将接收到的数据添加到tab_ruku_main表中。由于篇幅有限,本系统所涉及的其他存储过程可参见本书附带的光盘。