SQL存储过程的优点、创建、互相调用与调试
2017-06-02 09:53
381 查看
存储过程的优点:
1.只在创建时编译,一般sql语句每执行一次就编译一次,另外,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用,因此可提高数据库执行速率。
2.可以实现只连接一次数据库就可以完成一个复杂的操作,如对多个表进行INSERT,UPDATE,DELETE,SELECT时,可将此复杂操作利用存储过程封装起来与数据库提供的事务处理结合使用,而不需要多次连接数据库。
3.可以重复使用、更稳定、安全,可限定使用权。
4.独立于程序,使得程序与数据库的工作独立进行。
创建一个简单的存储过程:
实现sql拼接字符串的存储过程如下:
修改存储过程名称:
删除指定存储过程:
存储过程调用另一个存储过程:
另一个优点是当存储过程存在异常时,可以在查询分析器中进行实时调试,从而分析出问题所在。具体方法如下:
假设你的存储过程是ProcTest,传入参数为@num=2,@key=’abc’
在查询分析器窗口中写入语句:
exec ProcTest 2,’abc’
然后点击调试窗口中的“启动调试“,进入调试界面,按F11进行单步调试即可进入存储过程。
1.只在创建时编译,一般sql语句每执行一次就编译一次,另外,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用,因此可提高数据库执行速率。
2.可以实现只连接一次数据库就可以完成一个复杂的操作,如对多个表进行INSERT,UPDATE,DELETE,SELECT时,可将此复杂操作利用存储过程封装起来与数据库提供的事务处理结合使用,而不需要多次连接数据库。
3.可以重复使用、更稳定、安全,可限定使用权。
4.独立于程序,使得程序与数据库的工作独立进行。
创建一个简单的存储过程:
CREATE PROCEDURE [dbo].[SP_GetBrandByABC] @abc varchar(50), @top int AS BEGIN select top(@top) BrandID,BrandName,BrandImg from LB_Brand where ABC=@abc and Auditing=1 and Isdelete=0 order by IsCommend desc,PageRank asc END
实现sql拼接字符串的存储过程如下:
CREATE PROCEDURE [dbo].[SP_GetCompanyByDateTime] @num int, @start datetime, @end datetime AS BEGIN declare @sql varchar(8000) set @sql='select' if @num>0 set @sql=@sql+' top('+convert(varchar(10),@num)+')' set @sql=@sql+' CompanyID,ChildUrl,CompanyName from LB_Company where Auditing=1' if (@start is null)or(@end is null) set @sql=@sql+' order by CompanyID DESC' else set @sql=@sql+' and Addtime>'''+convert(varchar(50),@start)+''' and AddTime<='''+convert(varchar(50),@end)+''' order by CompanyID DESC' print @sql --用于本地查看sql语句,当用于生产时将此行去掉,因为会占用很大内存 exec(@sql) END GO
修改存储过程名称:
EXEC sp_rename 'OldProcName', 'NewProcName'
删除指定存储过程:
DROP PROCEDURE ProcName
存储过程调用另一个存储过程:
--根据公司ID获取访问PV值 CREATE PROCEDURE [dbo].[SP_GetVisitorRecoudCount] @CompanyID int AS BEGIN select @count=count(0) from (select count(0) as row from TJ_VisitorRecord b inner join ViewRecord c on b.VRID=c.VRID where DateDiff(dd,outTime,getdate())<=@TimePeriod and c.QueryPar1=@CompanyID group by b.VRID) as t return @count END GO --根据公司ID获取访问IP量 CREATE PROCEDURE [dbo].[SP_GetVisitorIPCount] @CompanyID int AS BEGIN declare @count int select @count=count(0) from (SELECT count(0) as row FROM ViewRecord where DateDiff(dd,ViewTime,getdate())<=@TimePeriod and QueryPar1=@CompanyID group by ViewIP) as t return @count END GO --填充统计临时表 CREATE procedure [dbo].[SP_FillTJSummaryTemp] as begin declare @CompanyID int declare cursor1 cursor for select CompanyID from LB_Company where Auditing=1 open cursor1 fetch next from cursor1 into @CompanyID while @@fetch_status=0 begin declare @strWhere nvarchar(50),@strWhere2 nvarchar(50),@PV int,@IP int,@UV int,@AccessTimes int --一天前(昨天) exec @PV=GetViewRecordCount 1,@CompanyID --调用存储过程GetViewRecordCount exec @IP=GetVisitorIPCount 1,@CompanyID --调用存储过程GetVisitorIPCount insert into TJ_Statistics(CompanyID, AddDate, PV, IP) values (@CompanyID,dateadd(day, -1, getdate()),@PV,@IP) fetch next from cursor1 into @CompanyID end close cursor1 deallocate cursor1 end go
另一个优点是当存储过程存在异常时,可以在查询分析器中进行实时调试,从而分析出问题所在。具体方法如下:
假设你的存储过程是ProcTest,传入参数为@num=2,@key=’abc’
在查询分析器窗口中写入语句:
exec ProcTest 2,’abc’
然后点击调试窗口中的“启动调试“,进入调试界面,按F11进行单步调试即可进入存储过程。
相关文章推荐
- PL/Sql 中创建、调试、调用存储过程
- .NET调用osql.exe执行sql脚本创建表和存储过程
- [Database]创建存储过程并在ASP.NET中的调用带参数的存储过程与及调用带参数的SQL语句对比
- .NET调用osql.exe执行sql脚本创建表和存储过程
- SQL创建数据库、表、存储过程及调用
- oracle sqlplus 创建和调用存储过程(procedure)
- sql 7 之 创建存储过程及其调用
- C#调用存储过程的方法,和简单存储过程创建的方法实例。【转载】为入门的朋友引路,大家互相学习。
- pl sql developer中如何调试存储过程以及调试包中创建的存储过程
- Oracle java存储过程在sqlplus中的调试信息显示
- 存储过程的互相调用
- sql存储分页过程,及asp调用。
- 如何使用 Visual Studio .NET 工具创建数据库对象和 Transact-SQL 存储过程。
- 步步为营VS 2008 + .NET 3.5(10) - DLINQ(LINQ to SQL)之调用存储过程的添加、查询、更新和删除
- 简单C# 与SQL存储过程调用
- 动态生成SQL的存储过程,以及调用方法
- 步步为营VS 2008 + .NET 3.5(10) - DLINQ(LINQ to SQL)之调用存储过程的添加、查询、更新和删除
- 用XML和SQL 2000来管理存储过程调用
- T-SQL 存储过程创建 PDF 格式文件(报表)