T-SQL 语言基础(五)—— 流程控制语句
一、BEGIN…END 语句
BEGIN
PRINT 1;
PRINT 2;
END
二、IF…ELSE 语句
DECLARE @age INT
SELECT @age = 15
IF @age > 10
BEGIN
PRINT '年龄大于'+ CAST(@age AS VARCHAR(5))
SELECT name,age FROM employee WHERE age > @age
END
ELSE
BEGIN
PRINT '年龄小于等于' + CAST(@age AS VARCHAR(5))
SELECT name,age FROM employee WHERE age <= @age
END
三、WHILE 语句
DECLARE @i INT,@j INT,@tmp VARCHAR(100)
SET @i = 1
SET @j = 1
SET @tmp = ''
PRINT '打印9*9乘法表'
WHILE @i <= 9
BEGIN
WHILE @j <= 9
BEGIN
SET @tmp = @tmp + ' ' + CAST(@i*@j AS CHAR(2))
SET @j = @j + 1
END
PRINT @tmp
SET @tmp = ''
SET @j = 1
SET @i = @i + 1
END
四、CASE 语句
-- CASE 等于判断,相当于枚举
SELECT name,CASE dept_id
WHEN 1 THEN '总经理办公室'
WHEN 2 THEN '人力资源部'
WHEN 3 THEN '行政部'
WHEN 4 THEN '财务部'
WHEN 5 THEN '销售部'
WHEN 5 THEN '技术研发部'
ELSE '其他部门'
END AS dept
FROM employee
-- CASE WHEN 带条件
DECLARE @num INT,@output NVARCHAR(10)
SET @num = 19
SET @output = CASE
WHEN @num < 8 THEN '一个数小于 8'
WHEN @num = 10 THEN '这个数是 10'
WHEN @num / 3 = 0 THEN '这个数能被3整除'
ELSE '这个数不在设定条件内'
END
PRINT @output
五、GOTO 语句
PRINT '执行第一句'
GOTO label
PRINT '执行第二句'
label:
BEGIN
PRINT '跳转到 LABEL 语句'
PRINT 'GOTO 语句容易出现死循环'
END
六、WAITFOR 语句
PRINT '打印第一句'
GO -- 使用GO进行批处理才能清楚看到延迟效果
WAITFOR DELAY '00:00:10' -- 延迟10秒查询
PRINT '等待了10秒'
WAITFOR TIME '15:21:10' -- 指定时间查询
PRINT '在指定时间 15:21:10 查询'
七、RETURN 语句:用于退出函数或存储过程
八、TRY…CATCH 语句
BEGIN TRY
PRINT '当前时间'
PRINT getdate()
INSERT employee VALUES('啊大',13)
INSERT employee VALUES('啊大',13)
END TRY
BEGIN CATCH
PRINT '出错消息为 ' + ERROR_MESSAGE()
END CATCH
获取错误消息的函数
函数 | 说明 |
---|---|
ERROR_NUMBER() | 错误号 |
ERROR_SERVERITY() | 严重性 |
ERROR_STATE | 错误的状态号 |
ERROR_PROCEDURE | 错误的存储过程或触发器的名称 |
ERROR_LINE | 错误的行号 |
ERROR_MESSAGE | 错误的消息文本 |