什么是Transact-SQL?
标准SQL不支持过程化控制, 不能完成复杂的功能.
T-SQL是过程化SQL语言, 是SQL的扩展
增加了过程化语句 (变量,赋值,分支,循环...)
是数据库服务器端的编程,不同于客户端的应用程序
不是标准语言 (ORACLE中称为PL/SQL)
作用:
编写批处理、存储过程,函数,触发器
一 SQL-SERVER批处理
下面的示例创建两个批处理。
USE STUDB --这是使用STUDB数据库 GO DECLARE @RS int /* 定义变量@RS */ SET @RS = (SELECT COUNT(*) /* 变量赋值 */ FROM STUDENT WHERE SDEPT='CS' ) PRINT '计科学院学生人数 ' + CAST(@RS AS char (3)) GO
用GO 命令结束一个批处理
两种类型的注释方式
一般保存到批处理文件中,以后打开执行,文件名后缀为.SQL
控制语句
BEGIN...END
BEGIN...END:一组要执行的 T-SQL 语句可以包含在 BEGIN...END 中。相当于C语言的复合语句{ }
语法:
BEGIN { statement | statement_block } END
其中,statement 为语句,statement_block 为语句块。
IF...ELSE
IF...ELSE:可以根据指定的条件来执行不同的SQL 语句。
语法:
IF Boolean_expression { sql_statement|statement_block } ELSE { sql_statement|statement_block }
IF 语句示例:
IF(SELECT COUNT(*) FROM SC WHERE CNO=1 )>20--单值子查询可以当做表达式 BEGIN …… END ELSE BEGIN …… END
WHILE 循环
WHILE:可以根据某些条件来执行一条 SQL 语句或一组语句。只要指定的条件为真,则重复执行该语句。
语法:
WHILE Boolean_expression { statement | statement_block } BREAK { statement | statement_block } CONTINUE
例题:
给1号课加分,如果平均分少于 75,每人加1分,如果最高分已经达到95,则停止加分 。
USE STUDB GO WHILE (SELECT AVG(GRADE) FROM SC WHERE CNO=1) < 75 --单值子查询可以当做表达式 BEGIN --循环体用BEGIN END IF (SELECT MAX(grade) FROM SC WHERE CNO=1) >= 95 BREAK UPDATE SC SET GRADE=GRADE+1 WHERE CNO=1 END PRINT '调整完成!' GO
变量
两种类型的变量:
全局变量
全局变量是SQL Server系统内部使用的变量,任何程序均可调用。
局部变量
自定义变量, 作用于局部
全局变量:
SQL Server 中的全局变量都用'@@' 标记作为前缀。