SQL server 变量if,while,存储过程

一.变量

1.if循环

2.

3.while循环

  declare @ss int
  set @ss =2
while @ss<10
begin
  print ‘Hello‘
  set @[email protected]+1
end
  --break 跳出循环

  declare @sss int
  set @sss=2
  while @sss<10
begin
  print‘Hello‘
  set @[email protected]+1
if @sss=6
  break
end
  --continue 跳出本次循环,继续下次循环

  declare @ssss int
  set @ssss=2
while @ssss<10
begin
  set @[email protected]+1
if @ssss>4and @ssss<7
  continue
  print‘Hello‘
end

4.练习,查看循环的过程

5.case when --相当于if 但是有局限性,需要具体到值
--查询老师表的年龄,如果>=35,【老头子】
--<=30【小青年】
--其他,【正当年】
select age,
case age
when 35 then ‘老头子‘
when 36 then ‘老头子‘
when 37 then ‘老头子‘
when 38 then ‘老头子‘
when 30 then ‘小青年‘
when 29 then ‘小青年‘
when 28 then ‘小青年‘
when 27 then ‘小青年‘
else ‘正当年‘
end
from teacher

6.查询英语分数最高的学生的性别,若男,【这是一个男生】
--若女,【这是一个小姑娘】
--若英语分数超过90,【成绩非常好,继续保持】
  declare @xing char(10)
  select @xing =sex from students where code =(select top 1 code from score order by yingfen desc)
  declare @yingfen int
if @xing =‘男‘
  print‘这是一个男生‘
else if @xing =‘女‘
  print‘这是一个小姑娘‘
else if @yingfen>90
  print‘成绩非常好,继续把持‘

7.查询数学分数最高的学生的任课教师的姓名和科目,
--【**老师教课质量高,是个**教师!】
declare @jname varchar(50)
declare @lesson char(10)
select @jname=name from teacher where code=
(select shujiao from Student where code=
(select top 1 code from score order by shufen desc) )

select @lesson=lesson from teacher where name [email protected]
print @jname +‘老师教课质量高‘+‘是个‘+rtrim(@lesson)+‘教师‘

7.查询三班语文教师的工号,姓名,以及所教科目
select code,lesson,name from teacher where code=(select top 1 yujiao from student where banji=‘三班‘ order by yujiao)

8.查询总分最高的学生的语文教师的所有信息
select * from teacher where code =
(select yujiao from student where code =
(select top 1 code from score group by code order by SUM(shufen+yufen+yingfen)desc))

二.存储

1.create proc firstproc--创建一个存储过程
as --存储过程关键字
select * from student--存储过程的语句
go
--执行存储过程的语句(两个都可以)
exec firstproc
execute firstproc

--存储过程可以有返回值
--定义一个变量去接收
declare @fanhui int
exec @fanhui = firstproc--需要执行之后才会有返回值,用变量接收
select @fanhui as 返回值--查看返回值

--修改存储过程的语句
alter proc firstproc
as
select * from score
go

练习: 利用存储过程查找语文教师张晓华所教课程的学生的分数
        过80的算优秀,优秀人数超过3个人即为【教师评测达标】
        若不到3个人,【不达标】
  create proc thirdproc
as
  declare @code int
  select @code=code from teacher where name =‘张晓华‘
  declare @count int
  select @count =COUNT(*)from score where code in (select code from students where yujiao [email protected])and yufen>80
if @count>3
  print‘教师评测达标‘
else
  print‘教师评测不达标‘
go
  exec thirdproc

2.

3.

练习:存储过程
查看所输入编号的学生是否能够结业,两门以上及格即可结业
三门都及格,【优秀】
两门及格,【结业】
一门及格,【不结业】
三门都不及格,【请重修】
  create proc sevenproc
  @code int
as
  declare @yufen decimal(18,2),@shufen decimal(18,2),@yingfen decimal(18,2)
  select @yufen =yufen from score where code [email protected]分别查询语数英的分数
  select @shufen =shufen from score where code [email protected]
  select @yingfen =yingfen from score where code [email protected]
  declare @count int--定义标记变量
  set @count=0 --标记变量在下面需要先使用再赋值,所以先给它为0
if @yufen>=60 --判断语数英是否及格
  set @[email protected]+1--及格的时候count+1
if @shufen>=60
  set @[email protected]+1
if @yingfen>=60
  set @[email protected]+1

if @count=3 --判断count的值:判断几门课及格
  print‘优秀‘
else if @count=2
  print‘结业‘
else if @count=1
  print‘不结业‘
else
  print‘请重修‘
go
--执行
  exec sevenproc 4

4.不带参数带返回值的存储过程
create proc elevenproc
as
return 5
go
--执行
--需要一个变量来接收这个返回值
declare @fan int
exec @fan=elevenproc
print @fan

5.带参数,带返回值的存储过程
create proc twelveproc
@one int,
@two int
as
declare @sum int
set @[email protected][email protected]
return @sum
go
--执行
declare @fanhuizonghe int
exec @fanhuizonghe = twelveproc 2,4
print @fanhuizonghe

练习:输入一个学生的学号,想要经过存储过程之后得到在这个学生的总分
create proc thirteenproc
@code int
as
  declare @yu decimal(18,2),@shu decimal(18,2),@ying decimal(18,2)
  select @yu =yufen from score where code [email protected]
  select @shu =shufen from score where code [email protected]
  select @ying =yingfen from score where code [email protected]
  declare @sum int
  select @[email protected][email protected][email protected]
  return @sum
go

  declare @fan int
  exec @fan =thirteenproc 5
  print @fan

时间: 2024-10-11 11:01:54

SQL server 变量if,while,存储过程的相关文章

SQL SERVER 自带系统存储过程分类

目录存储过程 用于实现 ODBC 数据字典功能,并隔离 ODBC 应用程序以使其不受基础系统表更改的影响. 变更数据捕获存储过程 用于启用.禁用.或报告变更数据捕获对象. 游标存储过程 用于实现游标变量功能. 数据收集器存储过程 用于处理数据收集器和以下组件:收集组.收集项和收集类型. 数据库引擎存储过程 用于 SQL Server 数据库引擎的常规维护. 数据库邮件存储过程 (Transact-SQL) 用于从 SQL Server 实例内执行电子邮件操作. 数据库维护计划存储过程 用于设置管

SQL SERVER 2008破解加密存储过程(修正存储过程过长解密出来是空白的问题)

SQLServer2005里使用with encryption选项创建的存储过程仍然和sqlserver2000里一样,都是使用XOR进行了的加密.和2000不一样的是,在2005的系统表syscomments里已经查不到加密过的密文了.要查密文必须使用DAC(专用管理员连接)连接到数据库后,在系统表 sys.sysobjvalues查询,该表的列imageval存储了相应的密文.具体可以使用下面的查询: SELECT imageval FROM sys.sysobjvalues WHERE o

在SQL server中如何写存储过程

总结一下SQL server中如何存储. USE [SSQADM]   ----Use 是跳转到哪个数据库,对这个数据库进行操作. GO        ----GO向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号,相当于提交上面的SQL语句. ----GO是把t-sql语句分批次执行.(一步成功了才会执行下一步,即一步一个GO) /****** Object:  StoredProcedure [dbo].[PROC_four_five_hr]    Scri

SQL Server 2008 R2——T-SQL 存储过程 返回表

未完成,感觉有点问题. ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完整性. 未经作者同意请勿修改(包括本声明),保留法律追究的权利. 未经作者同意请勿用于出版.印刷或学术引用. 本文不定期修正完善,为保证内容正确,建议移步原文处阅读. 本文链接:http://www.cnblogs.com/wlsandwho/p/4374367.html =

sql server 变量 字符串拼接

参考:SQL server中null+字符串,isnull以及把查询结果赋给一个字符变量组成另一个查询语句 1.开始定义的字符串都为null.例如:declare @sql 需求:在一个游标内 循环获取手机号的字符串进行拼接.但是一直拼接不成功 declare @dhhm as varchar(2000) --定义了变量电话号码 如果不给它赋值的则为null,后面字符串拼接的时候就会报错 declare @rcount as int --定义变量数量!!!!!!!!!!!!!! set @rco

SQL Server 2008 R2执行存储过程sp_MailItemResultSets引起大量PREEMPTIVE_OS_WAITFORSINGLEOBJEC等待

  从监控工具DPA中发现一个数据库(SQL Server 2008 R2)的等待事件突然彪增,下钻分析发现数据库执行存储过程sp_MailItemResultSets时,引起了非常严重的等待(High Wait),而主要的等待事件为PREEMPTIVE_OS_WAITFORSINGLEOBJEC. 如下截图所示: 查询正在执行的SQL,发现会话正在执行下面SQL(存储过程sp_MailItemResultSets中的一个SQL语句),等待事件为ASYNC_NETWORK_IO.   USE m

SQL Server变量声明、设置、使用、输出

创建数据表c3,字段 ID .age.name CREATE TABLE c3 ( ID INT, age INT, name varchar(50) ) 为数据表C3插入数据 INSERT INTO c3(ID,age,name) VALUES(1,18,'张三'),(2,22,'周五'),(3,23,'赵柳') 声明三个变量:ID.age.name 数据类型分别为:int.int.varchar(50) declare @ID int,@age int,@name varchar(50) 设

SQL server 变量、运算符

一.三个表的练习 表一:学生表 student学号:code int (主键)从1开始姓名:name varchar(50)性别:sex char(10)班级:banji char(10)语文教师编号:yujiao int 数学教师编号:shujiao int 英语教师编号:yingjiao int 表二:教师表 teacher教师编号:code int (主键) 从1001开始负责课程:lesson char(10)(语文.数学.英语)年龄:age int生日:birth datetime 表

数据库开发基础-SQl Server 变量、运算符、if、while

变量: SQL语言也跟其他编程语言一样,拥有变量.分支.循环等控制语句. 在SQL语言里面把变量分为局部变量和全局变量,全局变量又称系统变量. 局部变量: 使用declare关键字给变量声明,语法非常简单:declare @<变量名> <变量类型> 对变量的赋值可以使用set关键字,使用set关键字时对变量的赋值一次只能赋值一个. 我们也可以在查询语句里面对这个变量进行赋值. 示例: 全局变量:又叫做系统变量. 常用的几个系统变量示例: 变量小练习: 定义变量的练习: 需要在打印的