控制语句

DECLARE @NUM1 INT ,@NUM2 INT 
set @NUM1=-4
set @NUM2=6
select @NUM1&@NUM2 as '@NUM1&@NUM2',
@NUM1|@NUM2 as '@NUM1|@NUM2',
@NUM1^@NUM2 as '@NUM1^@NUM2'
GO

DECLARE @HELLO CHAR(20)
SET @HELLO='China!'
select 'I'+ 'LOVE' + @HELLO
GO


DECLARE @NUM INT
SET @NUM=523
SELECT @NUM AS 取正, -@NUM as 取负, ~@NUM as 取反
GO

--- 控制语句 ---

--BEGIN END 语句块
/*


语法:
BEGIN
{
SQL_STATEMENT | STATMENT_BLOCK
}
END
参数说明:
SQL_STATMENT: 使用语句块定义任何有效的T-SQL语句
STATEMENT_BLOCK:使用语句块定义任何有效的T-SQL语句块

*/

BEGIN
SELECT A.学号,A.姓名, a.班级编号,b.成绩
FROM 学生信息 A INNER JOIN 成绩表 B ON A.学号=B.学号
GROUP BY A.班级编号

END



--IF ELSE 条件语句
/*

语法:
IF Boolean_expression
{
sql_statement | statement_block
}
else
{
sql_statement | statement_block
}
参数说明:
boolean_expression: 返回TRUE 或FLASE 的表达式。如果布尔表达式中含有SELECT 语句,必须用圆括号将SELECT 语句括起来
SQL_STATMENT: 使用语句块定义任何有效的T-SQL语句
STATEMENT_BLOCK:使用语句块定义任何有效的T-SQL语句块

*/

--SAMPLE
if((select 学籍 from 学生信息 where 学号='200130000117')='在校')
begin
print '该生已经毕业!'
select 学籍 from 学生信息 where 学号='200130000117'
end
else
print '该生没有毕业!'

--CASE 分支语句
/*

有两种格式
1)简单格式:将某个表达式与一组简单表达式进行比较以确定结果
2)搜索格式:计算一组布尔表达式以确定结果
1、
case input_expression
when when_expression then result_expression
[……n]
[else else_result_expression]
end
参数说明:
input_expression:指使用简单case 格式时所计算的表达式,可以是任何有效的表达式。
when_expression:用来和input_expression表达式做比较的表达式,input_expression和每个when_expression的数据类型必须相同,或者是隐性转换
result_expression:指当input_expression=wher_expression的取值为true时,需要返回的表达式
else_result_expression:指当input_expression=when_expression的取值为false时,需要返回的表达式。
2、
case
when boolean_expression then result_expression
[……n]
[else else_result_expression]
end
参数说明:

*/
use 教务管理系统
GO

select 姓名, 籍惯=
case 籍贯
when '河南' then '来自河南'
when '北京' then '来自北京'
when '湖南' then '来自湖南'
when '湖北' then '来自湖北'
else '来自其它省市'
end
from 学生信息


--while循环语句
/*

语法格式:
while boolean_expression
{
sql_statement | statement_block
}
[break]
{
sql_statement | statement_block
}
[continue]
{
sql_statement | statement_block
}
参数说明:
boolean_expression: 布尔表达式,可以返回true或false。如果布尔表达式中含有select 语句,必须用圆括号将select 语句括起来
SQL_STATMENT: 使用语句块定义任何有效的T-SQL语句
STATEMENT_BLOCK:使用语句块定义任何有效的T-SQL语句块
break: 导致从内层的while 循环中退出,将执行出现在end关键字后面的任何语句块,end关键字为循环结束标记。
contunue :使while循环重新开始执行,忽略continue关键字后的任何语句

*/

declare @i int
declare @j int
set @i=0
set @j=0 /* 声明并初始化变量@i,@j */
while @i<8
BEGIN
IF @i<=4
begin
while @j<5
begin
print space(9-@j)+replicate('*',@j*2+1)
set @j=@j+1
end
set @i=@i+1
end
else --输出菱形的下半部分
begin
while @j>0
begin
set @j=@j-1
print space(10-@j)+replicate('*',@j*2-1)
end
set @i=@i+1
end
end


--waitfor 延迟语句
waitfor
{
DELAY Time | TIME time | (RECEIVE_STATEMENT) [TIMEOUT TIMEOUT]
}
DELAY : 可以继续执行批处理、存储过程或事务之前必须经过的指定时段,最长可以小时。
Time 要等待的时间。可以使用datetime 数据可接受的格式之一指定它,也可以将其指定为局部变量,不能指定日期。因为,不允许指定datetime值的日期部分。
TIME: 指示sql server 等待到指定时间
receive_statement : 任何有效的receive语句


--return 无条件退出语句
return [INTEGER_EXPRESSION]
INTER_EXPRESSION : 参数返回一个整数值.


--goto 跳转语句
goto label
label 参数指定要跳转到的语句标号,其名称要符合标识符的规定

--try catch错误处理语句
/*
语句作用:如果try块内部发生错误,则会将控制传递给catch块中包含的另一个语句组。
try catch 构造捕捉所有严重级别大于10但不终止数据库连接的错误。其使用格式如下:
begin try
{sql_statement | statement_block}
end try
begin catch
{sql_statement | statement_block}
end catch

*/

--SAMPLE
begin try
select distict 年级 from 学生信息
select 425/0 as '结果'
end try

begin catch
select ERROR_MESSAGE() as '错误信息'
end catch

补充一下:由于我是学习语言出身的,语言基本上都会有FOR(;;),但是在SQL中没有这个。至少我现在还不知道有这个。
posted @ 2011-10-12 18:03  _cc  阅读(280)  评论(0编辑  收藏  举报