Sql存储过程基本语法

Sql存储过程基本语法之简介:

存储过程(Stored Procedure), 是一组为了完成特定功能的SQL 语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行它,在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程。

系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQL Server。 用户自定义存储过程是由用户创建,并能完成某一特定功能,如:查询用户所需数据信息的存储过程。存储过程具有以下优点

1.存储过程允许标准组件式编程(模块化设计)

存储过程在被创建以后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响。因为应用程序源代码只包含存储过程的调用语句,从而极大地提高了程序的可移植性。

2.存储过程能够实现快速的执行速度

如果某一操作包含大量的Transaction-SQL 代码,,或分别被多次执行,那么存储过程要比批处理的执行速度快很多,因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析优化,并给出最终被存在系统表中的执行计划,而批处理的Transaction-SQL 语句在每次运行时都要进行编译和优化,因此速度相对要慢一些。

3.存储过程能够减少网络流量

对于同一个针对数据数据库对象的操作,如查询修改,如果这一操作所涉及到的Transaction-SQL 语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,否则将是多条SQL 语句从而大大增加了网络流量降低网络负载。

4.存储过程可被作为一种安全机制来充分利用

系统管理员通过,对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制。

实例:create PROCEDURE pagination
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@pagecount int output, -- 返回页总数, 非 0 值则返回
--@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '1=1' -- 查询条件 (注意: 不要加 where)
AS
declare @sql nvarchar(2000)
--获得表中所有记录的条数
declare @recordcount int
declare @getcountsql nvarchar(2000)
set @getcountsql = N'select @count = count(*) from ' + @tblName + N' where '
+ @strWhere
exec sp_executesql @getcountsql,N'@count int output',@count=@recordcount output
if @recordcount=0
begin
set @pagecount = 0
return
end
declare @lastcount int
set @lastcount = @recordcount % @PageSize
if @lastcount = 0
set @pagecount = @recordcount / @PageSize
else
set @pagecount = @recordcount / @PageSize + 1
if @lastcount = 0 or @pageindex < @pagecount
begin
set @sql = N'select ' + @strGetFields + N' from (select top ' + convert(nvarchar(4),@PageSize) +
N' * from (select top ' + convert(varchar(10),@PageSize*@PageIndex) + N' * from ' +
@tblName + N' where ' + @strWhere + N' order by ' +@fldName+ N') as t order by ' + @fldName +
' desc) as tt order by ' + @fldName
end
else
begin
if @lastcount != 0 and @pageindex = @pagecount
begin
set @sql = N'select ' + @strGetFields + N' from (select top ' + convert(nvarchar(4),@lastcount) +
N' * from (select top ' + convert(varchar(10),@PageSize*@PageIndex) + N' * from ' +
@tblName + N' where ' + @strWhere + N' order by ' +@fldName+ N') as t order by ' + @fldName + ' desc) as tt order by ' + @fldName
end
end
print @sql
exec sp_executesql @sql
go
select * from authors
declare @pagecount int
exec pagination 'authors','*','au_id',5,1, @pagecount output,'state=''CA'''
print @pagecount



你可能感兴趣的:(数据库SQL)