T_SQL编程


Transact-SQL语言是SQL Server为用户提供的一种编程语言,是对标准SQL的实现和扩展,它具有标准SQL的主要特点,

同时增加了变量、运算符、函数和流程控制等语言元素,使得其功能更加强大。

1.批处理,什么是批处理

  所谓 "批" 是从客户机传递到服务器上的一组完整的数据的sql指令。

  作用:

    只是通知查询分析器有多少语句包含在当前批,查询分析器将两个Go之间的语句组成一个字符串交给服务器去执行。

    当前的批处理语句出现错误不会影响下一个批处理

2.sql 中的变量

  变量的声明:

    declare 变量名  数据类型  [,变量名  数据类型]

    注意:变量名前必须加@符号

  变量的赋值:

     单个赋值:set 变量名=值

     多个赋值:select 变量名=值 [,变量名 =值]

     将查询出的结果赋值:select 变量名=列名1  [,变量名 =列名..] from 表名  [ where .....]

  常用的系统变量(全局变量):

   @@ERROR:返回执行上一条T-sql 语句所返回的错误号

   @@IDENTITY:返回最近一次插入的identity列的值

   @@PROCID:返回当前存储过程的Id标识

   @@REMSERVER:返回在登录记录中记载远程SQL server服务器的名字

   @@SPID:返回当前服务器进程的Id标识

   @@TRANCOUNT:返回当前连接中,处于活动状态事务的数目

   @@VERSION:返回当前SQL server服务器的安装日期、版本、处理器类型

   @@TOTAL_ERRORS:返回自SQLServer服务器启动后,所遇到的读写总数

   @@ROWCOUNT:返回上一条SQL语句所影响到数据行的数目

   注意:系统变量是只读的,不能进行修改或赋值操作,一般是将系统变量赋值给局部变量(也就是我们自定的变量)来使用的

3.控制流程语句

  1. IF...ELSE条件判断语句

    语法格式:

      IF 判断的条件

         表达式|SQL1语句

      ELSE

        表达式|SQL2

     例如,根据学号来判断student数据库的考试成绩(Exam)是否有记录

      

Declare @stuNo varchar(30)  

      set @stuNo ='135147'

      IFSELECT COUNT(*) FROM Exam where stuNo=@stuNo)=0

       begin  

          PRINT ('学号为'+@stuNo+'学员没有考试成绩记录')  

       end

      Else

        begin

           PRINT ('学号为'+@stuNo+'学员参加了考试,有成绩记录')

        end

      **PRINT:是在屏幕上显示输出的信息,beggin - end 相当于其他语言里面的{ }(用于执行多个表达式语句)

  2. CASE 语句   

    (1)简单表达式

        CASE 表达式

          WHEN  与条件比较的值    THEN   表达式

          [WHEN ...N.... THEN ....  ]

          [ELSE  条件都不成立时要执行的表达式]

        END

       eg:

      

 SELECT stuNo 学号 ,stuName 姓名,stuAge, 年龄,

          case   stuSex

             when '' then '先生'

             when '女'  then '女士'

             else  '未知'

          end  '称呼'
    from Persons

 

    (2)选择表达式

        CASE

           WHEN 比较的表达式     THEN  表达式

           [WHEN ..N ... THEN ... ]

           [ELSE  条件都不成立时要执行的表达式]

        END 

        如果比较的表达式为true ,就执行THEN 里面的表达式

        eg:

          

select  examno 考号,stuno 学号,score 分数 ,

            case

               when score<60  then 'D'

               when score<70 then 'C'

               when score<80  then 'B'

               when score<90 then 'A'

            end  '等级'

          from Exam

  3.WHILE循环语句

    语法:

       WHILE  表达式

        Begin

           //T-sql语句

           【BREAK】   

          【CONTINUE】

        End

    当表达式的结果为真时,服务器加将重复执行该循环里面的T-sql语句

    【BREAK】的作用就是无条件的结束该循环,并开始执行紧跟着End后面的语句。

    【CONTINUE】的作用就是跳过本次循环,开始执行下一次循环。

     eg:将不及格的笔试分数提升到2分,并在存在的最低分不低于60分的情况下,跳出循环

       

 1 declare  @score float
 2 
 3        set @score=0
 4 
 5        while exists (select * from Exam where score<60)
 6 
 7         begin
 8 
 9           update Exam set score+=2 where score<60
10 
11           select @score=MIN(score) from Exam
12 
13           if @score<60
14 
15              continue
16 
17           else
18 
19              break;
20 
21         end

4.函数

  1.数学函数

    ABS(数值表达式) :求绝对值,返回数值类型表达式的绝对值    例如: select ABS(-45.3)

    ASCII(字符型表达式):求ASCII码函数,返回该字符对应的ASCII数字  例如: select ASCII('h')

    AVG([ALL|DISTINCT]表达式)  :求平均值   例如:select AVG(score) from Exam

    COUNT([ALL|DISTINCT]表达式|*) 统计数量   例如: select count(*) from Exam

    CEILING(数值型表达式):上舍。返回最小的大于或等于给定数值型表达式的整数值。

    FLOOR(数值型表达式):下舍。返回最大的小于或等于给定数值表达式的整数值。

    POWER(数值型表达式1,数值型表达式2):乘方运算函数。进行乘方运算,POWER(2,3)表示2的3次方。

    PI():求圆周率。不使用参数

    SQRT(float 型表达式):求指定float表达式的平方根,返回float型的结果。

    ROUND(数值型表达式,整数):四舍五入,将数值表达式四舍五入成整数指定精度的形式。

    RAND (整型表达式):产生随机数。返回一个0和1之间的随机数。 

  2.字符串函数

   ---转发至:https://www.cnblogs.com/ruhaoren/p/12758965.html

SELECT ASCII('ABC');--计算字符串第一个字符的ASCII值
SELECT CHAR(65);--把给定ASCII编码转换成字符

SELECT LOWER('AbC');--全转换为小写
SELECT UPPER('aBc');--全转换为大写

SELECT LTRIM('   AAA');--去掉左边的空格
SELECT RTRIM('AAA   ');--去掉右边的空格

SELECT LEN('  ABC  ');--计算字符个数,不包含后面的空格
SELECT LEFT('ABCDEFG',3);--从左边返回指定个数的字符
SELECT RIGHT('ABCDEFG',3);--从右边返回指定个数的字符
SELECT SUBSTRING('ABCDEFG',3,2);--从第三个字符开始返回2个字符

SELECT CHARINDEX('A', 'CCBBAA'); --返回第一个参数字符串在指定字符串中的位置
SELECT REPLACE('AABBCC','A','D'); --用第三个参数替换第一个参数中的第二个参数所指定字符串

  3.日期函数

    GETDATE()

        返回当前的系统时间。例如:SELECT GETDATE() DATEPART(datepart,date)

        以整数形式返回给定 date 型数据的指定日期部分。一个 date 型数据日期部分的取值。

    DATENAME(datepart,date)以字符串形式返回给定 date 型数据的指定日期部分。

   DATEADD(datepart,number,date)在给定当日器变量指定日期部分的基础上,加上一个整型数值。

   DATEDIFF(datepart,date,enddate)返回开始日期和结束日期在给定日期间的差值。

   DAY(date):返回指定日期 DAY 部分的数值。

   MONTH(date):返回指定日期 MONTH 部分的数值。

   YEAR(date):返回指定日期 YEAR 部分的数值。

select GETDATE()    --获取当前系统时间

select DATENAME(YEAR,GETDATE())    --返回日期年份部分

select DATEADD(DAY,1,GETDATE()) --返回在日期天数部分加一的日期

select DATEDIFF(YEAR,'2000-1-1',GETDATE())    --返回两个日期年份的差值

select DAY(GETDATE())    --返回天数部分

select MONTH(GETDATE())    --返回月份

select YEAR(GETDATE())    --返回年份