SQL server (三)T-SQL语言
1.基本概念
SQL Server 2008在支持标准SQL语言的同时,对其进行了扩充,引入了T-SQL,即Transact-SQL,T-SQL是使用SQL Server 2008的核心,通过它,可以定义变量、使用流控制语句、自定义函数、自定义存储过程等,极大地扩展了SQL Server 2008的功能。
1.标识符
数据库对象的名称即为其标识符
2.标识符的种类
1)常规标识符 2)分隔标识符
3.常规标识符规则
1)第一个字符必须是英文大小写、 下划线(_)、at符号(@)或者数字符号(#)
2)首字符可以用到的、十进制数字、美元符号($)
4.标识符不能是Transact-SQL保留字
5.不允许嵌入空格或其他特殊字符
批处理
批处理是包含一个或多个Transact-SQL语句的组,从应用程序一次性地发送到SQL Server 2008进行执行。可以理解为选中SQL语句块执行它,SQL Server会一行一行地执行它。
注释
--(双连字符)
/*...*/(斜杠-星号字符对)
2.常量和变量
常量
文字值或标量值
- 字符串常量:单引号内
- Unicode字符串:前缀必须是大写N
- 二进制常量:前缀0x,后面是十六进制字符串
- bit常量:0和1
- datetime常量
- integer常量
- decimal常量
- float和real常量:使用科学计数法
- money常量
变量
局部变量
用DECLARE语句声明,作用范围仅在程序内部。名称以@开头。
DECLARE @variable_name datatype
[,@variable_name datatype]...
赋值
SET @local_variable=expression
SELECT @local_variable=expression[,...n]
全局变量
事先定义好的,用户不能去创建和修改。以@@开头。
输出
PRIINT
PRINT msg_str|@local_variable|string_expr
运算符
- 算术运算符 + - * / %
DECLARE @a INT, @b INT, @z INT
SET @a=18
SET @b=4
SET @z=@a+@b
PRINT @z
- 赋值运算符 =
- 位运算符 & | ^
- 比较运算符
- 逻辑运算符 返回TRUE或FALSE。AND BETWEEN IN LIKE NOT OR
- 连接运算符 + (字符串拼接)
- 一元运算符 +正 -负 ~位反
- 运算符的优先级
3.流控制语句
1. BEGIN...END
将多个语句组合成一个逻辑块
BEGIN
两条或两条以上的语句
...
END
2. IF...ELSE
DECLARE @m INT
SET @m=12
IF @m>0
PRINT 'TRUE'
ELSE
PRINT 'FALSE'
3. WHILE
--求1到10之间的整数和
DECLARE @x INT,@sum INT
SET @x=1
SET @sum=0
WHILE @x<=10
BEGIN
SET @sum=@sum+@x
SET @x=@x+1
END
PRINT @sum
4. BREAK与CONTINUE
5. CASE
根据表达式的真假来确定是否返回某个值
--根据学生分数给出判断
DECLARE @grade INT,@msg VARCHAR(10)
SET @grade=13
SET @msg=
CASE
WHEN @grade>=90 AND @grade<=100 THEN 'excellent'
WHEN @grade>=70 AND @grade<90 THEN 'good'
WHEN @grade>=60 AND @grade<70 THEN 'pass'
ELSE 'fail'
END
PRINT @msg
6. WAITFOR
WAITFOR延迟语句可以将它之后的语句在一个指定的时间间隔之后执行,或在未来的某一指定时间执行。
WAITFOR DELAY 'time'|time 'time'
delay等待时间,time结束时间点 格式为'hh:mm:ss'
--3秒后显示‘傻瓜你好’
WAITFOR DELAY '00:00:03'
PRINT '傻瓜你好'
--16点15分显示‘傻瓜你好’
WAITFOR TIME '16:15:00'
PRINT '傻瓜你好'
7. GOTO
改变程序执行的流程,使程序跳到标识符指定的程序行继续往下执行。
GOTO 标识符
标识符需要在其名称后加上一个冒号:
8. RETURN
从查询或过程中无条件退出
RETURN [整数值]
--RETURN
DECLARE @m INT
SET @m=3
IF @m>0
PRINT '遇到RETURN之前'
RETURN
PRINT '遇到RETURN之后'