SQL编程_局部变量_全局变量_cast,convert数据类型转换_if,else_while_case,end

使用变量

变量分为:

局部变量:

1.局部变量必须以标记@作为前缀,如@age

2.局部变量的使用也是先声明,再赋值

全局变量:

1.全局变量必须以标记@@作为前缀,如@@version

2.全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值


 

声明局部变量 

语法

DECLARE   @变量名  数据类型

示例

DECLARE @name varchar(8)
DECLARE @seat int

 

赋值-语法

    SET @变量名 = 值 
或
    SELECT  @变量名 =

赋值-示例

SET @name = '张三'
SELECT @name = studentName FROM Student 
        WHERE studentNo = '10011' 

SET赋值与SELECT赋值的区别

  SET

SELECT

同时对多个变量赋值

不支持

支持

表达式返回多个值时

出错

将返回的最后一个值赋给变量

表达式未返回值时

变量被赋NULL值

变量保持原值

 


全局变量

全局变量都使用两个@标志作为前缀

变 量

含    义

@@ERROR

最后一个T-SQL错误的错误号

@@IDENTITY

最后一次插入的标识值

@@LANGUAGE

当前使用的语言的名称

@@MAX_CONNECTIONS

可以创建的同时连接的最大数目

@@ROWCOUNT

受上一个SQL语句影响的行数

@@SERVERNAME

本地服务器的名称

@@TRANSCOUNT

当前连接打开的事务数

@@VERSION

SQL Server的版本信息

如何获得数据库服务器的名称和SQLSERVER的版本信息?

分析:

1.由@@SERVERNAME得到数据库服务器名称,@@VERSION获得SQLSERVER的版本

2.利用PRINT语句输出消息或SELECT语句输出结果

PRINT  '服务器的名称: ' + @@SERVERNAME

PRINT  'SQL Server的版本' + @@VERSION 

使用全局变量输出数据库信息

SELECT @@SERVERNAME AS  '服务器的名称: '

SELECT @@VERSION AS 'SQL Server的版本' 

 

如何获得数据更新失败时的错误信息?

分析:

使用@@ERROR全局变量表示错误号

1.@@ERROR大于0

2.最近一条SQL语句执行失败的错误号

示例:

1.插入名为“武松”、出生日期是1990年12月31日的学生信息

2.修改“武松”的出生日期为“1970年7月8日”

INSERT INTO Student (StudentName,StudentNo,LoginPwd,         GradeId,Sex,BornDate,IdentityCard)
VALUES('武松',10011,'123456',1,0,'1990-12-31','11010119901231001x')
PRINT '当前错误号' + CONVET(varchar(5), @@ERROR)
 
UPDATE Student SET BornDate='1970-7-8' WHERE StudentNo=10011
PRINT '当前错误号:' + CONVERT(varchar(5), @@ERROR) 
GO

 


数据类型转换函数

T-SQL提供了两个转换函数

语法一

CAST(表达式 AS 数据类型)

示例一

SELECT StudentName + '的出生日期是' + 
          CAST(BornDate as varchar(50)) AS '学生信息'
FROM Student

 

语法二

CONVERT(数据类型,表达式,样式 )

 

示例二

SELECT StudentName, 
               CONVERT(varchar(50),BornDate,102) AS 出生日期
FROM Student

CONVERT()与CAST() 的不同点是:可以指定转换的样式


 

 

逻辑控制语句

分支结构

1.IF-ELSE语句

2.CASE-END语句

循环结构

1.WHILE语句


 

IF-ELSE语句

SQL中的IF-ELSE语句
IF (条件)
  BEGIN
    语句1
    语句2
    … …
  END
ELSE
 BEGIN
    语句1
    语句2
    … …
  END

ELSE是可选部分 如果有多条语句,才需要 BEGIN-END语句块

设置输出结果的格式


 

WHILE循环语句

SQL中的WHILE语句
WHILE (条件)
  BEGIN
    语句1
    语句2
    ……
    BREAK
  END

BREAK表示跳出循环 如果有多条语句,才需要BEGIN-END语句块


CASE-END语句

语法:

CASE 
  WHEN 条件1 THEN  结果1
  WHEN 条件2 THEN  结果2
  ……
  ELSE 其他结果
END

 

ELSE:表示CASE中所有WHEN条件均不为 TRUE 时返回的结果 如果省略ELSE且WHEN条件都为FALSE时,CASE语句返回NULL

 

示例:

采用美国ABCDE五级打分制显示学生Java Logic课最近一次考试成绩

A级: 90分以上

B级: 80-89分

C级: 70-79分

D级: 60-69分

E级: 60分以下

DECLARE @date datetime                        --考试时间
……
SELECT 学号=StudentNo, 成绩=
CASE
  WHEN StudentResult < 60 THEN 'E'
  WHEN StudentResult BETWEEN 60 AND 69 THEN 'D'
  WHEN StudentResult BETWEEN 70 AND 79 THEN 'C'
  WHEN StudentResult BETWEEN 80 AND 89 THEN 'B'
  ELSE 'A'
END  
  FROM Result 
……

 

 


 批处理命令

1.批处理是包含一个或多个 SQL 语句的组,从应用程序一次性地发送到SQL Server执行

2.SQL Server 将每批SQL语句编译成一个执行单元,此单元称为执行计划

问题:

为了督促学生学习,学校对多次考试不及格的学生给予处理。凡是一次考试不及格者,给予警告;三次以下(含)不及格者,肄业处理;三次以上不及格者,开除学籍

分析:

第一步:创建新表Punish,表结构是:

1.处罚记录(学号、不及格次数、处理意见)

2.创建新表时处理意见为空

第二步:查询所有不及格的成绩插入Punish表中

第三步:根据每个学生不及格次数批量更新处理意见

CREATE TABLE Punish(            --创建表
  StuNo int NOT NULL,                --学号
  StuCnt int NOT NULL,               --不及格次数
  StuMng varchar(50)                  --处理意见
)
GO
INSERT INTO Punish                  --插入数据
  SELECT  StudentNo 学号, COUNT(0) 不及格次数,'' 处理意见
  FROM Result WHERE StudentResult<60 
  GROUP BY StudentNo
GO
……
SELECT * FROM Punish             --查询

使用批处理可以提高代码的执行效果,通常会将相关业务的代码放在同一批处理语句中


 

总结

1.变量赋值时可以采用SET语句和SELECT语句

2.输出语句可以使用PRINT语句和SELECT语句

3.使用CAST()函数和CONVERT()函数实现数据类型的转换

posted @ 2019-03-04 16:58  橙-极纪元JJYCheng  阅读(604)  评论(0编辑  收藏  举报