T-SQL 即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版

命名规则

  • 开头不能是数字、空格或特殊符号
  • 首字符后可以包含字母、数字、汉字、_@#
  • 不能是系统保留字

全局变量

以 @@开头 由 SQL Server 内置的都能访问的变量 。不能修改和创建,只能读取。全局变量全局有效

  1. @@ERROR -- 返回执行的上一个T-SQL语句的错误号
  2. @@IDENTITY -- 返回插入到表的IDENTITY列的最后一个值
  3. @@LANGUAGE -- 返回当前所用语言的名称
  4. @@MAX_CONNECTIONS -- 返回Sql Server实例允许同时进行的最大用户连接数
  5. @@ROWCOUNT -- 返回上一次语句影响的数据行的行数
  6. @@SERVERNAME -- 返回运行Sql Server的本地服务器的名称
  7. @@SERVICENAME -- 返回Sql Server正在其下运行的注册表项的名称
  8. @@TIMETICKS -- 返回每个时钟周期的微秒数
  9. @@TRANCOUNT -- 返回当前连接的活动事务数
  10. @@VERSION -- 返回当前安装的日期、版本和处理器类型

局部变量

局部变量只能当前连接(当前对话)有效

定义变量

定义局部变量,以 DECLARE 进行定义,变量名必须以@开头。

  1. DECLARE @变量名 变量类型 = 变量值; -- 可以不赋予变量值

变量赋值

  • SELECT 赋值 ```plsql DECLARE @变量名 = 0; — 定义变量,初始化值

SELECT @变量名 = 值; — 直接赋值

SELECT @a变量名 = 列名 FROM 表名; — 通过查询语句进行赋值

  1. - SET 赋值
  2. ```plsql
  3. SET @变量名 = 值; -- 不可通过查询语句进行赋值

流程控制

IF 结构

  1. IF(...)
  2. BEGIN
  3. SQL 语句体
  4. END
  5. ELSE IF(...)
  6. BEGIN
  7. SQL 语句体
  8. END
  • IF 后面的括号可以省略,但是如果是 SELECT语句就不可以
  • BEGIN…END 相当于 {}

CASE 结构

  • 函数用法
    1. CASE 字段
    2. WHEN 条件1 THEN 结果
    3. WHEN 条件2 THEN 结果
    4. ELSE 结果
    5. END
    1. CASE
    2. WHEN 条件1, [条件2] THEN 结果
    3. WHEN 条件2, [条件2] THEN 结果
    4. ELSE 结果
    5. END

    CASE 结构只返回第一个符合条件的值,剩下的 CASE 部分将会被自动忽略

  • 行转列
    1. SELECT MAX(CASE 被转行名 WHEN N'转列名' THEN 行名 ELSE 0 END) AS 转列名 FROM 表名;
    1. SELECT * FROM 表名 PIVOT(MAX(行名) FOR 被转行名 IN (被转字段, ..))

WHILE 结构

  1. HHILE(...)
  2. BEGIN
  3. SQL 语句体
  4. BREAK/CONTINUE/RETURN
  5. END
  • RETURN: 从查询或者过程中无条件退出
  • BREAK: 推出循环
  • CONTINUE: 重新开始循环,在 CONTINUE 关键字之后的任何语句都被忽略