数据库——SQL SERVER Transact-SQL 程序设计

什么是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 语句示例:

IFSELECT 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 中的全局变量都用'@@' 标记作为前缀。

猜你喜欢

转载自www.cnblogs.com/wkfvawl/p/10852023.html
今日推荐