关系数据库中存储过程的应用
软件世界
存储过程最大的优点是在提高数据库执行效率的同时减少管理人员的工作量。
现在我们结合实例来了解一下存储过程的具体运用。首先从Microsoft SQL Server程序组中运行查询分析器并且登录到数据库服务器,接下来你就可以在右边的空白窗口中输入SQL指令了。
先来试一下SQL内置的系统存储过程:键入“SP_ Helpdb”。运行该存储过程将获得当前数据库所对应数据库文件和日志文件的详细信息。再来看看扩展存储过程:键入“XP_CMDSHELL 'dir c:'”,你将得到C盘的文件和目录列表。XP_CMDSHELL存储过程其实是DOS命令外挂程序,该语句的效果和你在DOS窗口下运行“Dir c:”命令完全相同。
最后我们来看一个用户自定义存储过程的例子,这是一个用来创建销售报表的简单存储过程。运行企业管理器,在目标数据库中创建一个新的用户自定义存储过程,代码如下:
CREATE PROCEDURE SalesTable_ Create @ProductNo char(12), @StartDate datetime, @EndDate datetime
AS
select x.Store_Name as 门店名,y.Prod uct_Name as 商品名称,z.Sellnum as 销售数量,y.Sellprc as 产品单价,z.Sellnum*y.Sellprc as 销售额
into SalesTable from Dim_Inn x,Dim_Products y inner join Fact_Sales z on y.Products_Id=z.Products_Id
where y.Goodsid=@ProductNo
and x.InnId=y.InnId
and y.Datting between @StartDate and @EndDate
if @@error=0
begin
declare @temp Decimal
select @temp=count(*) from SalesTable
print '销售报表创建成功!共有 '+ convert(varchar,@temp)+'条记录被生成。'
end
else
print '销售报表创建失败!'
GO
通常我们用维表来存放产品等相关信息(例子中的Dim_Inn和Dim_Product表),用事实表来存放具体的交易记录(例子中的Fact_Sales表)。所以在创建这张销售报表时必须根据维表中的产品代码和门店代码通过建立内联接得到对应的产品名称和门店名。而传入的三个参数分别表示产品的编码以及开始/结束日期。创建好该存储过程后在查询分析器中输入“SalesTable_Create '000100032707','20040101',20040131'”就可以获得编号为000100032707的产品在2004年1月份的销售分析报表(名为SalesTable),同时系统还会给出该报表的记录数量。
通过一个简单的例子,希望大家对存储过程的运用有所了解 。