--来源《21天学通SQL Server》
1 Transact-SQL概述
Transact-SQL语言是SQL Server为用户提供的一种编程语言,是对标准SQL的实现和扩展,它具有标准SQL的主要特点,同时增加了变量、运算符、函数和流程控制等语言元素,使得其功能更加强大。
1.1 Transact-SQL与标准SQL
Transact-SQL又简称T-SQL,它是微软公司在SQL Server数据库管理系统中对标准SQL的实现和扩展,是使用SQL Server的核心,所有与SQL Server实例通信的应用程序,其实都是通过发送T-SQL语句到服务器来完成对数据库的操作的。
T-SQL与标准SQL稍有不同,SQL是结构化查询语言(Structured Query Language),是目前关系型数据库管理系统中使用得最广泛的查询语言。T-SQL是在SQL上发展而来的,T-SQL在SQL的基础上添加了变量、运算符、函数、注释和流程控制等,是标准SQL语言的扩展。因此,标准SQL是几乎所有关系型数据库都支持的语言,而T-SQL是Microsoft SQL Server支持的语言。
1.2 Transact-SQL的语法约定
2 加入注释
2.1 单行注释
单行注释使用“--”标记,即在语句或者说明文字的最前面加上“--”标记。
--先插入一条记录
INSERT a(c1,c2)
VALUES ('11111','22222')
--查看插入记录之后表的内容
SELECT * FROM a
2.2多行注释
多行注释使用“/* ……*/”标记
/*
下面代码可以完成以下操作:
1、查看a表中所有的记录内容
2、向表a插入数据
3、查看插入后的结果
*/
SELECT * FROM a
INSERT a(c1,c2)
VALUES ('33333','44444')
SELECT * FROM a
3 Transact-SQL运算符
T-SQL所使用的运算符可以分为算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符、字符串连接运算符和一元运算符7种。
3.1 算术运算符
算术运算符是对两个表达式执行数学运算,这两个表达式可以是精确数字型或近似数字型。其中“+”、“-”运算符也可以用datetime和smalldatetime值进行算术运算。
3.2 赋值运算符
T-SQL里只有一个赋值运算符,等号(=),赋值运算符的作用是给变量赋值,也可以使用赋值运算符在列标题和定义列值的表达式之间建立关系。
3.3 位运算符
位运算符是在两个表达式之间按位进行逻辑运算,这两个表达式可以是整数或二进制数据类型。
3.4 比较运算符
比较运算符用于判断两个表达式是否相同,返回true或false的布尔数据类型。除了text、ntext和image数据类型的表达式外,比较运算符可以用于所有的表达式。
3.5 逻辑运算符
逻辑运算符用于对某些条件进行判断,判断其为true或false,与比较运算符一样,返回的是布尔数据类型。
3.6 字符串连接运算符
T-SQL里只有一个字符串连接运算符,加号(+),例如:'123'+'a'结果就是123a
3.7 一元运算符
一元运算符只能对一个表达式进行操作。
3.8 运算符的优先级
4 Transact-SQL中的常量和变量
常量的格式取决于它所表示的值的数据类型,数据类型不同,常量也会有不同的表达方式。T-SQL中的变量可以分为局部变量和全局变量两种,局部变量是以@开头命名的变量,全局变量是以@@开头命名的变量。
4.1 常量
在T-SQL中,有字符串常量(例如“11111”),整数常量(例如5),货币常量($10),日期常量,二进制常量等各种常量。并且,可以用多种方式来使用常量,例如下面几种用法。
(1)作为算术表达式中的常量,例如:
SELECT 产品名称,单价+$10 AS 价格
FROM 产品
(2)在WHERE子句中,作为比较字段的数据值,例如:
SELECT *
FROM 产品
WHERE 单价 > $10
(3)为变量赋值,例如:
DECLARE @abc int
SET @abc = 123
(4)在Update的set子句或Insert的values子句里指定字段的数据值,例如:
UPDATE a SET c2= '55555'
WHERE c1= '11111'
(5)在print或raiserror语句里指定输出的消息文本,例如:
PRINT ‘完成操作’
(6)作为条件语句(如If语句、case函数)中要判断的值,例如:
IF @@ERROR > 0
PRINT N '出错了'
4.2 局部变量
局部变量是由用户自定义的变量,这些变量可以用来存储数值型、字符串型等数据,也可以存储函数或存储过程返回来的值。
(1)DECLARE语句可以用来声明局部变量:
DECLARE
{ @local_variable [AS] data_type }
[ ,...n]
其中参数说明如下。
● @local_variable:局部变量名称。
● data_type:局部变量的数据类型,但不能是text、ntext或image数据类型。
(2)用SET语句和SELECT语句可以为变量赋值:
SET @local_variable = value
SELECT @local_variable = value
(3)用SELECT语句和PRINT语句可以显示变量内容,其语法代码如下。
SELECT @local_variable
PRINT @local_variable
【例1】定义局部变量,并给其赋值,最后显示变量内容。
--定义局部变量name和age
DECLARE @name nvarchar(10)
DECLARE @age int
--给变量name和age赋值
SET @name = '张三'
SELECT @age = 20
--显示变量name和age的内容
PRINT @name
PRINT @age
使用SELECT语句对变量赋值比使用SET语句的范围要广且灵活,可以将查询结果赋值给变量。
【例2】使用SELECT语句给变量赋值。
DECLARE @name nchar(20)
SELECT @name = sname
FROM stu_info
WHERE sno = ‘0006’
PRINT '学生姓名:' + @name
4.3 全局变量
全局变量是由系统提供的,用于存储一些系统信息。用户只可以使用全局变量,不可以自定义全局变量。
【例3】使用全局变量ROWCOUNT显示SELECT语句运行后得到的记录数。
SELECT * FROM stu_info
PRINT '一共查询了' + CAST( @@ROWCOUNT AS varchar(5)) + '条记录'
5 流控制语句
5.1 BEGIN…END语句
Transact_SQL使用BEGIN和END来标记一个程序语句块的开始和结束。它经常与IF…ELSE和WHILE循环一起使用。
BEGIN
语句1
语句2
语句3
……
END
5.2 IF…ELSE语句
IF条件
BEGIN
语句块1
END
[ELSE
BEGIN
语句块2
END]
说明:
● 如果条件为真,则执行语句块1,不执行语句块2。
● 如果条件为假,则执行语句块2,不执行语句块1。
● 语句块1和语句块2永远不会同时执行。
● ELSE部分为可选。
在IF或ELSE中还可以嵌套其他IF语句。
【例4】下面的程序用于求两数之商,如果除数不为0,则求出正确结果,如果为0,则给出提示。
DECLARE @x real,@y real,@z real
SELECT @x=9,@y=5
IF @y<>0
BEGIN
SELECT @z=@x/@y
PRINT '结果为:'+CAST(@z AS char)
END
ELSE
PRINT '除数不能为零!'
如果给变量@y赋值为0,则运行结果:
说明:如果IF或ELSE中只有一条语句,则可以省略BEGIN和END标记。
5.3 WHILE语句
WHILE循环条件
BEGIN
语句块(循环体)
END
【例5】编程计算1+2+3+…+100的结果。
DECLARE @x int,@s int
SELECT @x=1,@s=0
WHILE @x<=100
BEGIN
SELECT @s=@s+@x
SELECT @x=@x+1
END
PRINT '结果为:'+CAST(@s AS char)
5.4 BREAK语句
该命令通常和IF…ELSE语句配合使用。
【例6】下面的程序用于打印1,2,3,4。
DECLARE @x int
SELECT @x=1
WHILE @x<=10
BEGIN
IF @x=5 /*判断是否为5,如果是则结束循环 */
BREAK
ELSE
PRINT CAST(@x AS char)
SELECT @x=@x+1
END
5.5 CONTINUE语句
COUNTINUE命令也用于WHILE循环。它会令循环立即从BEGIN处开始重新执行,也就是说不再执行其语句块中剩下的部分。通常COUNTINUE也和IF…ELSE语句配合使用。
【例7】下面的程序用于打印1~5之间的所有奇数。
DECLARE @x int
SELECT @x=0
WHILE @x<=5
BEGIN
SELECT @x=@x+1
IF @x%2=0 /*判断是否为偶数,如果是则重新开始循环 */
CONTINUE
PRINT CAST(@x AS char)
END
5.6 WAITFOR语句
WAITFOR语句指定在一段时间后执行下一个Transact-SQL语句、语句块。
WAITFOR{ DELAY 'time_to_pass'|TIME 'time_to_execute' }
其中:
● DELAY指定在多长时间后执行语句,最长为24小时。
● TIME指定运行批处理、存储过程或事务的时间。
【例8】要在1小时后,执行一条查询语句:
WAITFOR DELAY '01:00:00'
SELECT * FROM student
5.7 CASE语句
CASE语句就是一个条件判断语句,在执行CASE语句时,当匹配了一个子句时就从CASE语句中跳出。
CASE <表达式>
WHEN <表达式> THEN <表达式>
[[WHEN <表达式> THEN <表达式>][…]]
[ELSE <表达式>]
END
说明:CASE语句不仅可以单独使用,也可以嵌套到SQL命令中。
【例9】根据学生成绩划分等级。
SELECT
CASE
WHEN 学生成绩>=85 THEN '优秀'
WHEN 学生成绩>=60 AND学生成绩<=84 THEN '中等'
WHEN 学生成绩<60 THEN '不及格'
END
FROM学生信息表
更多推荐
SQL Server(六)-Transact-SQL语言
发布评论