什么是储存过程
我第一次运用存储过程是在机房重构时,在进行组合查询设计时我需要通过多条sql语句查找信息,字段和属性,我把sql语句写在了数据库的“存储过程”中,而在程序中只需要调用存储过程,就可以执行查询语句的功能了。下面是我组合查询的存储过程展示
USE [EngineSystem]
GO
/****** Object: StoredProcedure [dbo].[PROC_CombinedQuery] Script Date: 2018/11/13 15:40:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <刘桐>
-- Create date: <2018.09.05>
-- Description: <机房重构组合查询学生信息>
-- =============================================
ALTER PROCEDURE [dbo].[PROC_CombinedQuery]
-- Add the parameters for the stored procedure here
@DbName nvarchar(50),
@cmbText1 nvarchar(50),
@cmbText2 nvarchar(50),
@cmbText3 nvarchar(50),
@cmbSymbol1 nvarchar(50),
@cmbSymbol2 nvarchar(50),
@cmbSymbol3 nvarchar(50),
@txtDateTime1 nvarchar(50),
@txtDateTime2 nvarchar(50),
@txtDateTime3 nvarchar(50),
@cmbRelation1 nvarchar(50),
@cmbRelation2 nvarchar(50)
AS
declare @TempSql varchar(500)--临时存放sql语句
--Char(32)是空格 插入(39)是单引号
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
--一个条件的查询
SET @TempSql='select * from '+@DbName+' where '+char(32)+@cmbText1+@cmbSymbol1+char(39)+@txtDateTime1+char(39)
if(@cmbRelation1!='')
--两个条件的查询
SET @TempSql=@TempSql+char(32)+@cmbRelation1+char(32)+@cmbText2+@cmbSymbol2+char(39)+@txtDateTime2+char(39)
if(@cmbRelation2!='')
--三个条件的查询
SET @TempSql=@TempSql+char(32)+@cmbRelation2+char(32)+@cmbText3+@cmbSymbol3+char(39)+@txtDateTime3+char(39)
execute(@Tempsql)
END
存储过程的优点
确实,在存储过程中写的sql语句也不少呀,为啥不直接写在程序文件中呢?
在实际开发中,我发现了写在存储过程里的两个优点
- 保存在特定的存储过程中,一次编译,即可执行。减少了程序文件中的代码量,这样你在对程序文件中的代码进行修改时,减少了查找量,同时单独放在存储过程中又保证了这段代码的完整性和安全性。
- 通过存储过程执行SQL语句比写在程序中再执行SQL语句的效率高
存储过程的应用
在《牛腩》中,我们同样需要很多sql语句对新闻进行各种条件的查找,删除和更新,又一次应用了存储过程后,更加感受到了它的强大。
<1>存储过程的位置
以sqlserver为例,找到sqlserver中的一个数据库展开——找到可编译性展开——右键存储过程——新建存储过程
<2>存储过程代码说明。下图是一个已经成功执行的存储过程
<3>程序调用存储过程,执行sql语句增删改查功能
可以看到,在调用存储过程时,我们在DAL(数据传输层)不再需要些sql语句,只需要调用存储过程中定义的名称,参数即可。非常方便的