存储过程详解

存储过程有点: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 FilesMicrosoft SQL ServerMSSQL.3MSSQLDataDemoTest.mdf'
17 ,@filename2='C:Program FilesMicrosoft SQL ServerMSSQL.3MSSQLDataDemoTest_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--返回的记录数
作者:梦亦晓,转载请注明出处
如果此文能给您提供帮助,请点击右下角的【推荐
如果您对此文有不同的见解或者意见,欢迎留言讨论
原文地址:https://www.cnblogs.com/eggTwo/p/3447452.html