关于TSql


 

1、Sql:结构化查询语言(Structrued  Query  Language)

2、TSql:是Sql语言的另一种版本,且只能在SqlServer中使用。和Sql不同的是,TSql中增加了对变量的声明和使用。

TSql中的几个关键点

1、局部变量的声明declare  @+任意字符   数据类型

2、局部变量的赋值(set 和select 两种方式,区别是什么?)select方式的赋值连接表格的使用而set方式的赋值不行,详细看下面代码

3、局部变量的使用和投影(打印)——select (投影),print(打印)——

4、TSql中的全局变量——看代码(常见的有@@identity:最后一次插入的标识列,@@rowCount:受上一个Sql影响的行数)

5、if语句

  1、流程控制:查询学号20060202的学员信息如果平均成绩不合格就打印姓名和平均成绩,否则只打印学号

       2、多分支语句:分等级打印学生成绩

       3、使用 case语句把bool类型转为有意义中文

       4、使用case分等级打印学生成绩信息

 

--局部变量

/*
declare @name varchar(8)-----name为变量名,varchar为数据类型
--局部变量赋值:
 set @name = 值
 select @name = 值
*/
 
/**/
--0声明和简单的使用变量
declare @name varchar(8)
--select @name = '划拉'
set @name = '划拉'
select @name
go



select * from student

--1.声明三个用于储存学号、出生日期、和平均成绩的变量并赋值
    --set方式
declare 
@stuId char(8),@stuBirth smalldatetime,
@stuAvgrade numeric(3,1)
set @stuId = '201201'
set @stuBirth = '1988-5-6'
select @stuAvgrade = '96.3'
select @stuId,@stuBirth,@stuAvgrade
--print @stuId
--print @stuBirth
go
    --select方式
declare 
@stuId char(8),@stuBirth smalldatetime,
@stuAvgrade numeric

select @stuId = stuId, @stuBirth = stuBirth, @stuAvgrade = stuAvgrade from student
where stuName = '丽思'
select @stuId,@stuBirth,@stuAvgrade
go


--全局变量



select @@error

@@error   --最后一个T-SQL错误的错误号
@@identity  --最后一次插入的标识列  
/*新增一名老师,同时立刻分配学生
insert into teacher('李磊')
declare @tid = @@IDENTITY
insert into studet values('学生A',@tid)
insert into studet values('学生B',@tid)

select @@identity
*/
 
create table emp
(
    empId int identity(1,1) primary key,
    empName varchar(20)
) 

insert into emp values('张三')
insert into emp values('李四')

select * from emp

select @@identity

  
@@language  --当前使用的语言的名称
@@max_connections --可以创建的同时连接的最大数目
@@rowcount  --受上一个SQL语句影响的行数
@@servername  --本地服务器的名称
@@servicename  --该计算机上的SQL服务的名称
@@timeticks  --当前计算机上每刻度的微妙数
@@transcount  --当前连接打开的事物数
@@version  --SQL Server的版本信息

--2,查询上次自动增长变量值,上一个SQL语句影响的行数

select @@identity
select @@rowcount


--流程控制
--IF语句
--3查询学号20060202的学员信息如果平均成绩不合格就打印姓名和平均成绩,否则只打印学号

declare 
@stuId char(8),
@stuName varchar(10),
@stuAvgrade numeric;

set @stuId = '20060202';
select @stuName = stuName, @stuAvgrade = stuAvgrade from student
where stuId = @stuId 

if @stuAvgrade < 60
begin
    print @stuName;
    print @stuAvgrade;
end

else
    print @stuId;

go

--4多分支语句分等级打印学生成绩

declare 
@stuId char(8),
@stuName varchar(10),
@stuAvgrade numeric;

set @stuId = '20060202';
select @stuName = stuName, @stuAvgrade = stuAvgrade from student
where stuId = @stuId 

if @stuAvgrade >= 90.0
    print '优秀'
else if @stuAvgrade >= 80.0
    select '良好'
else if @stuAvgrade >= 70.0
    select '中等'
else if @stuAvgrade >= 60.0
    select '及格'
else
    select '不及格'
go

--5使用 case语句把bool类型转为有意义中文

create table employee
(
    empId int identity(1,1) primary key,
    empName varchar(10) not null,
    empSex bit not null
)

insert into employee values('才干',1)
insert into employee values('小彬',1)
insert into employee values('丽丽',0)
insert into employee values('乐乐',0)
    --给列起别名的版本
select empName as 姓名, 性别 =
case empSex 
    when 1 then '' 
    when 0 then '' 
end
from employee

    --使用原表列名的写法
select empName, empsex =
case empSex
    when 1 then ''
    when 0 then ''
end
from employee

--6.使用case分等级打印学生成绩信息

select 学号 = stuId, 姓名 = stuName, 平均成绩 = 
case 
    when stuAvgrade > 90.0 then  '优秀'
    when stuAvgrade > 80.0 then  '良好'
    when stuAvgrade > 70.0 then  '中等'
end
from student

-- while 循环语句

while(1=1)-----条件永远成立
select * from student

 

posted @ 2018-04-28 22:45  EFLand  阅读(654)  评论(0编辑  收藏  举报