SQL server过程学习(通俗易懂)

  1. --------------------------------------------------------------------------  
  2. -------------------------------存储过程Study------------------------------  
  3. --------------------------------------------------------------------------  
  4. --删除表  
  5. drop table student  
  6. go  
  7.   
  8. --------------------------------------------------------------------------  
  9. --------------------------------------------------------------------------  
  10. --创建用户信息数据表  
  11. create table student  
  12. (  
  13.     id int identity(1,1),--递增1,  
  14.     stuNo varchar(50) primary key--唯一键  
  15.     stuName varchar(50),  
  16.     stuAge datetime,  
  17.     stuSex varchar(5)         
  18. )  
  19.   
  20. --创建用户分数数据表  
  21. create table course  
  22. (  
  23.     id int identity(1,1),--递增1,  
  24.     stuNo varchar(50),  
  25.     courseName varchar(50),  
  26.     courseScore decimal   
  27. )  
  28.   
  29. --------------------------------------------------------------------------  
  30. --------------------------------------------------------------------------  
  31. --插入数据  
  32. --插入单条数据  
  33. insert into student(stuNo,stuName,stuAge,stuSex) values('01','王男','1996-08-27 09:00:00.000','男')  
  34.   
  35. --多数量插入数据  
  36. --SQL Server2008特有的插入  
  37. insert into student values('02','杨幂','1995-4-20 6:0:0','女'),  
  38.                           ('03','程峰','1988-9-17 15:30:0','男')  
  39.                             
  40. insert into course values('02','思想政治','85.5'),  
  41.                          ('02','数学','70'),  
  42.                          ('02','语文','80'),  
  43.                          ('02','物理','90'),  
  44.                          ('02','化学','65'),  
  45.                          ('02','英语','96')  
  46.                            
  47. insert into course values('03','思想政治','60'),  
  48.                          ('03','数学','65'),  
  49.                          ('03','语文','84'),  
  50.                          ('03','物理','70'),  
  51.                          ('03','化学','76'),  
  52.                          ('03','英语','54')                          
  53.                             
  54.   
  55. --使用UNION ALL来进行插入  
  56. insert into student   
  57. select '04','wangan','1895-5-27 14:30:28','女'  
  58. union all     
  59. select '05','zhangnan','1990-1-20 19:0:0','女'  
  60. go  
  61.   
  62. --------------------------------------------------------------------------  
  63. --------------------------------------------------------------------------  
  64. --修改数据  
  65. update student set stuSex='男',stuAge='2016-5-9 8:0:0' where stuName='王男'   
  66. go  
  67.   
  68. --------------------------------------------------------------------------  
  69. --------------------------------------------------------------------------  
  70. --删除数据  
  71. delete from student where stuNo=01  
  72. go  
  73.   
  74. --------------------------------------------------------------------------  
  75. --------------------------------------------------------------------------  
  76. --存储过程查询所有数据  
  77. --begin...end 类似编程语言中的{}  
  78. create proc stu1  
  79. as  
  80. begin  
  81.     select * from student;  
  82. end  
  83. go  
  84.   
  85. exec stu1  
  86. go  
  87.   
  88. --------------------------------------------------------------------------  
  89. --------------------------------------------------------------------------  
  90. --存储过程根据条件用户名查询用户信息  
  91. create proc stu2  
  92. @sname varchar(50)   --声明全局变量  
  93. as  
  94. begin  
  95.     select * from student s where s.stuName=@sname;  
  96. end  
  97. go  
  98.   
  99. exec stu2 '王男'  
  100. go  
  101.   
  102. --------------------------------------------------------------------------  
  103. --------------------------------------------------------------------------  
  104. --存储过程内部设定用户名查询用户信息  
  105. create proc stu3  
  106. @sname varchar(50)='王男'  
  107. as   
  108. begin  
  109.     select * from student s where s.stuName=@sname;   
  110. end  
  111. go  
  112.   
  113. exec stu3   
  114. go  
  115.   
  116. --------------------------------------------------------------------------  
  117. --------------------------------------------------------------------------  
  118. --存储过程根据用户名查询是否存在这个用户信息  
  119. create proc stu4  
  120. @sname varchar(50),  
  121. @result varchar(8) output --输出参数  
  122. as  
  123. begin  
  124.      if (select COUNT(1) from student s where s.stuName=@sname)>0  
  125.      --if exists (select COUNT(1) from student s where s.stuName=@sname)  
  126.      set   
  127.         @result='存在!'  
  128.      else  
  129.      set   
  130.         @result='不存在!'  
  131. end  
  132. go  
  133.   
  134.   
  135. declare @result varchar(8)  
  136. exec stu4 '王男1',@result output  
  137. print @result  
  138. go  
  139.   
  140. --------------------------------------------------------------------------  
  141. --------------------------------------------------------------------------  
  142. --存储过程内部设定局部变量用户名来查询用户信息  
  143. create proc stu5  
  144. as  
  145. declare @sname varchar(50)  --局部变量声明  
  146. set @sname='杨幂'  
  147. begin  
  148.     select * from student s where s.stuName=@sname  
  149. end  
  150. go  
  151.   
  152. exec stu5  
  153. go  
  154.   
  155. --------------------------------------------------------------------------  
  156. --------------------------------------------------------------------------  
  157. --存储过程根据条件用户学号查询用户名  
  158. create proc stu6  
  159. @stuNo varchar(50)  
  160. as  
  161. declare @sname varchar(50)  
  162. set @sname=(select s.stuName from student s where s.stuNo=@stuNo)  
  163. select @sname  
  164. go  
  165.   
  166. exec stu6 '01'  
  167. go  
  168.   
  169. --------------------------------------------------------------------------  
  170. --------------------------------------------------------------------------  
  171. --存储过程插入用户信息  
  172. create proc stu7  
  173. @stuNo varchar(50),  
  174. @stuName varchar(50),  
  175. @stuAge datetime,  
  176. @stuSex varchar(5)  
  177. as   
  178. begin  
  179.     insert into student   
  180.         (stuNo,stuName,stuAge,stuSex)  
  181.     values   
  182.         (@stuNo,@stuName,@stuAge,@stuSex)   
  183. end  
  184. go  
  185.   
  186. exec stu7 '07','王莽','2000-9-9 9:9:9','女'  
  187. go  
  188.   
  189. --------------------------------------------------------------------------  
  190. --------------------------------------------------------------------------  
  191. --存储过程根据用户名来删除对应的用户信息  
  192. --@@rowcount返回操作条数  
  193. --return返回信息,终止下面的操作  
  194. create proc stu8  
  195. @stuName varchar(50)  
  196. as  
  197. begin  
  198.     delete from student where stuName=@stuName  
  199.     return @@rowcount  
  200. end  
  201. go  
  202.   
  203. declare @result varchar(50)  
  204. exec @result=stu8 '王莽'  
  205. select @result as '删除条数'  
  206. --print @result  
  207. go  
  208.   
  209. --------------------------------------------------------------------------  
  210. --------------------------------------------------------------------------  
  211. --存储过程根据用户学号来查询他的平均分  
  212. create proc stu9  
  213. @stuNo varchar(50),  
  214. @avg int output  
  215. as   
  216. begin  
  217.     set @avg=(select AVG(courseScore) from course where stuNo=@stuNo)  
  218.     --等同  
  219.     --select @avg=AVG(courseScore) from course where stuNo=@stuNo  
  220. end  
  221. go  
  222.   
  223. declare @avg int  
  224. exec stu9 '02',@avg output  
  225. print @avg  
  226. go  
  227.   
  228. --------------------------------------------------------------------------  
  229. --------------------------------------------------------------------------  
  230. --存储过程根据用户学号来联合查询用户信息和课程信息  
  231. create proc stu10  
  232. @stuNo varchar(50)  
  233. as  
  234.     select c.stuNo,s.stuName,s.stuAge,s.stuSex,c.courseName,c.courseScore from student s join course c on s.stuNo=c.stuNo where s.stuNo=@stuNo  
  235. go  
  236.   
  237. exec stu10 '02'  
  238. go  
  239.   
  240. --------------------------------------------------------------------------  
  241. --------------------------------------------------------------------------  
  242. --存储过程判断学号是否存在,不存在,插入用户信息,返回消息;存在,返回信息  
  243. create proc stu11  
  244. @stuNo varchar(50),  
  245. @stuName varchar(50),  
  246. @stuAge datetime,  
  247. @stuSex varchar(5),  
  248. @result varchar(50) output  
  249. as  
  250.     if exists (select * from student where stuNo=@stuNo)  
  251.         begin  
  252.             set @result='对不起,学号已存在!'  
  253.         end       
  254.     else  
  255.         begin  
  256.             insert into student   
  257.                 (stuNo,stuName,stuAge,stuSex)  
  258.             values   
  259.                 (@stuNo,@stuName,@stuAge,@stuSex)  
  260.             set @result='恭喜你,用户信息插入成功!'    
  261.         end  
  262. go  
  263.   
  264. declare @result varchar(50)  
  265. exec stu11 '06','王忠磊','1980-8-8 8:9:0','男',@result output  
  266. print @result  
  267.   
  268. --------------------------------------------------------------------------  
  269. --------------------------------------------------------------------------  
  270. --存储过程查询当前用户的平均成绩与总的平均成绩之间的关系  
  271. create proc stu12  
  272. @stuNo varchar(50)  
  273. as  
  274. declare @curAvg decimal(18,2)  
  275. declare @totalAvg decimal(18,2)  
  276. if exists(select * from course where stuNo=@stuNo)  
  277.     begin  
  278.         set @totalAvg=(select AVG(courseScore) from course)  
  279.         select @curAvg=AVG(courseScore) from course where stuNo=@stuNo  
  280.         print ('总的平均分:'+convert(varchar(18),@totalAvg))  
  281.         print ('该生的平均分:'+convert(varchar(18),@curAvg))  
  282.         if @curAvg>@totalAvg  
  283.             print '高于平均水平!'  
  284.         else   
  285.             print '低于平均水平!'   
  286.     end  
  287. else  
  288.     print '该生对应的分数信息不存在,请重新查询!'  
  289. go  
  290.   
  291. exec stu12 '03'  
  292. go  
轉載:http://blog.csdn.net/wanlong360599336/article/details/52415420
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值