经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
T_SQL编程
来源:cnblogs  作者:经过你的世界  时间:2020/11/9 15:56:20  对本文有异议

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)是否有记录

      

  1. Declare @stuNo varchar(30)  
  2.       set @stuNo ='135147'
  3.  
  4.       IF SELECT COUNT(*) FROM Exam where stuNo=@stuNo)=0
  5.  
  6.        begin  
  7.  
  8.           PRINT ('学号为'+@stuNo+'学员没有考试成绩记录')  
  9.        end
  10.  
  11.       Else
  12.  
  13.         begin
  14.  
  15.            PRINT ('学号为'+@stuNo+'学员参加了考试,有成绩记录')
  16.         end

 

 

 

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

  2. CASE 语句   

    (1)简单表达式

        CASE 表达式

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

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

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

        END

       eg:

      

  1.  SELECT stuNo 学号 ,stuName 姓名,stuAge, 年龄,
  2.           case   stuSex
  3.              when '' then '先生'
  4.  
  5.              when '女' then '女士'
  6.              else '未知'
  7.           end '称呼'
        from Persons

  1.  

 

 

 

    (2)选择表达式

        CASE

           WHEN 比较的表达式     THEN  表达式

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

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

        END 

 

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

        eg:

          

  1. select examno 考号,stuno 学号,score 分数
  2.             case
  3.  
  4.                when score<60 then 'D'
  5.  
  6.                when score<70 then 'C'
  7.  
  8.                when score<80 then 'B'
  9.  
  10.                when score<90 then 'A'
  11.  
  12.             end '等级'
  13.  
  14.           from Exam

 

 

 

  3.WHILE循环语句

    语法:

       WHILE  表达式

        Begin

           //T-sql语句

           【BREAK】   

          【CONTINUE】

        End

 

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

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

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

 

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

       

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

  1. SELECT ASCII('ABC');--计算字符串第一个字符的ASCII
  2. SELECT CHAR(65);--把给定ASCII编码转换成字符
  3.  
  4. SELECT LOWER('AbC');--全转换为小写
  5. SELECT UPPER('aBc');--全转换为大写
  6.  
  7. SELECT LTRIM(' AAA');--去掉左边的空格
  8. SELECT RTRIM('AAA ');--去掉右边的空格
  9.  
  10. SELECT LEN(' ABC ');--计算字符个数,不包含后面的空格
  11. SELECT LEFT('ABCDEFG',3);--从左边返回指定个数的字符
  12. SELECT RIGHT('ABCDEFG',3);--从右边返回指定个数的字符
  13. SELECT SUBSTRING('ABCDEFG',3,2);--从第三个字符开始返回2个字符
  14.  
  15. SELECT CHARINDEX('A', 'CCBBAA'); --返回第一个参数字符串在指定字符串中的位置
  16. 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 部分的数值。

 

 

  1. select GETDATE() --获取当前系统时间
  2.  
  3. select DATENAME(YEAR,GETDATE()) --返回日期年份部分
  4.  
  5. select DATEADD(DAY,1,GETDATE()) --返回在日期天数部分加一的日期
  6.  
  7. select DATEDIFF(YEAR,'2000-1-1',GETDATE()) --返回两个日期年份的差值
  8.  
  9. select DAY(GETDATE()) --返回天数部分
  10.  
  11. select MONTH(GETDATE()) --返回月份
  12.  
  13. select YEAR(GETDATE()) --返回年份

 

 

 

  

 

    

原文链接:http://www.cnblogs.com/ldli/p/13619363.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号