存储过程详解

存储过程有点:1.节约网络传输流量。2.执行速度快(预编译)。

存储过程缺点:1.不够灵活。

标签:

1.系统存储过程

2 分离数据库

3 附加数据库

4 创建存储过程

5 分页存储过程

代码如下:

 1 ----------------存储过程----------------------------------
 2 
 3 --存储过程---就像数据库中运行方法(函数)
 4 
 5 --1.系统存储过程--------------------------------------------------------------------------------------
 6 
 7 EXEC sp_databases  --查看所有的数据库
 8 EXEC sp_tables   --查看当前数据库中的所有表(包括表的一些信息)
 9 EXEC sp_stored_procedures   --查看当前数据库中的所有存储过程
10 
11 ---2 分离数据库(要分离的数据库不能是可用数据库)--------------------------------------------------------
12 exec sp_detach_db DemoTest
13 
14 --3 附加数据库-------------------------------------------------------------------------------------
15 exec sp_attach_db @dbname='DemoTest'
16 ,@filename1='C:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\Data\DemoTest.mdf'
17 ,@filename2='C:\Program Files\Microsoft SQL Server\MSSQL.3\MSSQL\Data\DemoTest_log.ldf'
18 
19 --4 创建存储过程--------------------------------------------------------------------------------------
20 
21 --4.1 带输入参数和输出参数的存储过程(向表插入一条数据并返回插入数据的ID)----
22 
23 --切换数据库
24 use DemoTest
25 go
26 
27 --如果存储过程存在则删除
28 if exists(select * from sys.objects where name='usp_InsertUser')
29 drop procedure usp_InsertUser
30 go
31 
32 --创建存储过程
33 
34 create proc usp_InsertUser
35 @Name nvarchar(16),
36 @Age int,
37 @Email varchar(32),
38 @ID INT OUTPUT ---输出型参数
39 as 
40     declare @ReturnID INT  --内部变量
41     insert into T_UserInfo values(@Name,@Age,@Email)
42     select @ID= @@identity
43 
44 --执行存储过程
45 declare @ID INT
46 execute usp_InsertUser 'jack',33,'dgdsg@qq.com',@ID OUTPUT
47 select @ID ---取得返回值
48 
49 
50 --4.2 分页存储过程的创建
51 use DemoTest
52 go
53 if exists(select * from sys.objects where name='usp_GetPageData')
54 drop procedure usp_GetPageData
55 go
56 create proc usp_GetPageData
57 @PageIndex int=1,---输入型参数,当前要显示的页码 默认值为1
58 @PageSize  int=10,----输入型参数,每页显示的记录数目
59 @PageCount int output ----输出型参数 总共的页码数目
60 as
61     declare @RowsCount int
62     select * from
63     (
64      select row_number()over(order by id desc) rowNum,* from T_UserInfo
65     ) t
66     where t.rowNum between @pageSize*@pageIndex-@pageSize+1 and @pageSize*@pageIndex
67     order by id desc
68 
69      ---求总共有多少页
70     select @RowsCount=count(*) from T_UserInfo    
71     set @pageCount=ceiling((@RowsCount/convert(float,@pageSize))) --select ceiling(7/3.0)
72 
73 
74 ---执行存储过程
75 declare @PageCount int
76 execute usp_GetPageData 1,20,@PageCount output
77 
78 select @PageCount--返回的记录数

 

posted @ 2013-11-28 12:46  梦亦晓  阅读(594)  评论(0编辑  收藏  举报