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