# 表达式

# 局部与全局

  • 局部变量:变量名前加一个 @
  • 全局变量:变量名前加两个 @ ,下面是一些常用的全局变量
    • @@ERROT :事务成功时为 00,否则为最近一次的错误号
    • @@ROWCOUNT :返回受上一语句影响的行数
    • @@FETCH_STATUS :返回最近一次 FETCHFETCH 语句执行后的游标状态
    • @@VERSION :返回 SQLServerSQL~Server 当前安装的日期、版本和处理器类型

# 声明与复制

SQL
1
2
3
4
5
-- 声明
DECLARE @变量名 数据类型, ....

-- 赋值
SET @变量名 = 值, ...

# 实例

SQL
1
2
3
4
5
6
7
8
9
10
11
DECLARE @sno CHAR(7), @score NUMERIC
SELECT @sno
FROM Score a, Student b
WHERE courseNo = '005'
AND a.studentNo = b.studentNo
AND studentName = 'zmc'

IF @@ROWCOUNT = 0
PRINT 'Warning: No rows are selected'
ELSE
SELECT @sno, @score

# 函数

  • substring(字符串, 起始位置, 长度) :截取字符串
    • 数据库下标是从 11 开始的
  • upper(字符) :转换小写字符为大写字符
  • dateadd(修改部分, 修改量, 初始日期) :返回新的 dateTimedateTime
  • datedill(查询部分, '起始日期', '终止日期') :查询两个日期之间的差距(指定部分)
    • 可以用来计算年龄
    • datediff(year, substring(idcard, 7, 8), getdate()) as age
  • getdate() :返回当前系统日期和时间
  • current_user() :返回当前的用户,等价于下面的
  • user_name() :返回给定标识号的用户名

# 流程控制语句

  • BEGIN...END :定义语句块
  • switchswitch
    SQL
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
    product_name,
    price,
    CASE
    WHEN price > 1000 THEN '高价'
    WHEN price > 500 THEN '中价'
    ELSE '低价'
    END AS price_level
    FROM products;