SQLServer存储过程中break、continue及return的使用

SQLServer编写存储过程中,我们会使用break、continue及return来中断程序的执行,这三者有什么区别,在此做以说明

break

退出 WHILE循环,执行循环体以后的语句,示例代码如下

declare @num int=10,
        @i int =0
while(@i<@num)
  begin
    set @i = @i +1
    if(@i=5) 
      break
    print @i
  end
  print '执行完毕'

执行结果为:
0
1
2
3
4
执行完毕
当执行到@i=5时,跳出循环,继续执行循环体(end为标志)外语句

continue

满足条件的循环体内的以后语句不再执行,进入到下一个循环,示例代码如下

declare @num int=10,
        @i int =0
while(@i<@num)
  begin
    set @i = @i +1
    if(@i=5) 
      continue
    print @i
  end
  print '执行完毕'

执行结果如下
1
2
3
4
6
7
8
9
10
执行完毕
循环体内本次循环continue以后的语句不再执行,进入下一个循环

return

直接退出过程(存储过程或函数),示例代码如下:

declare @num int=10,
        @i int =0
while(@i<@num)
  begin
    set @i = @i +1
    if(@i=5) 
      return
    print @i
  end
  print '执行完毕'

执行结果如下:
1
2
3
4
执行到@i=5退出过程,循环体内满足条件以后的语句及循环体外的语句均不执行

### SQL Server 常用 SQL 语句 #### 1. **声明与变量赋值** 在 SQL Server ,可以通过 `DECLARE` 关键字声明变量: ```sql DECLARE @myVariable INT; SET @myVariable = 10; SELECT @myVariable AS MyVariableValue; ``` 这里我们声明了一个名为 `@myVariable` 的整数变量并赋予了它值 10。 #### 2. **定义 T-SQL 语句块** 使用 `BEGIN...END` 来包围一组 T-SQL 语句: ```sql BEGIN TRANSACTION INSERT INTO Employees (Name, Position) VALUES ('John Doe', 'Manager'); COMMIT; ``` 这个例子展示了一次简单的事务操作流程,用于插入员工信息。 #### 3. **条件语句 - IF/ELSE** 条件语句用于基于特定条件执行不同的逻辑路径: ```sql IF EXISTS(SELECT * FROM Orders WHERE OrderID = 1) BEGIN UPDATE Orders SET Status = 'Delivered' WHERE OrderID = 1; END ELSE BEGIN PRINT 'Order not found.'; END; ``` 这段代码检查是否存在某个订单 ID 的记录,如果存在,则更新订单状态;如果不存在则打印一条消息。 #### 4. **多重选择语句 - CASE** CASE 语句允许基于多个条件来决定执行哪条逻辑路径: ```sql SELECT ProductID, Price, CASE WHEN Price > 50 THEN 'Expensive' ELSE 'Affordable' END as PriceClassification FROM Products; ``` 这会根据价格对产品分类。 #### 5. **循环语句 - WHILE** WHILE 循环允许重复执行一段代码直到满足停止条件: ```sql DECLARE @i INT = 1; WHILE (@i <= 5) BEGIN SELECT @i AS CurrentNumber; SET @i = @i + 1; END; ``` 此示例显示数字 1 到 5 的序列。 #### 6. **条件转移语句 - GOTO** 虽然不推荐在现代 SQL 编程使用,但可以作为示例: ```sql DECLARE @counter INT = 1; START_LOOP: IF (@counter > 5) GOTO END_LOOP; SELECT @counter AS CounterValue; SET @counter = @counter + 1; GOTO START_LOOP; END_LOOP: ``` 这是一个简单的计数器程序,通过 `GOTO` 跳转实现循环终止。 #### 7. **退出语句 - BREAKCONTINUE** 这些语句用于控制循环行为: ```sql DECLARE @i INT = 1; WHILE (@i <= 10) BEGIN IF (@i = 5) BREAK; -- 立即退出循环 SET @i = @i + 1; END; SET @i = 1; WHILE (@i <= 10) BEGIN IF (@i = 5) CONTINUE; -- 继续下一个迭代 SET @i = @i + 1; END; ``` 在第一个例子,当 `i` 等于 5 时循环断;第二个例子则跳过等于 5 的迭代。 #### 8. **返回语句 - RETURN** 在存储过程或其他可返回结果的上下文使用: ```sql CREATE PROCEDURE GetEmployeeCount AS BEGIN DECLARE @count INT; SELECT @count = COUNT(*) FROM Employees; RETURN @count; END; EXEC GetEmployeeCount; ``` 这个存储过程返回员工总数。 #### 9. **等待语句 - WAITFOR** 用于在执行某些操作之前等待特定时间: ```sql WAITFOR DELAY 'PT10S'; SELECT 'Operation completed after waiting 10 seconds.'; ``` 此处代码让操作暂停 10 秒钟后再继续。 --- **相关问题**: 1. 如何在 SQL Server 创建索引? - 使用 `CREATE INDEX` 语句创建索引。 2. 在 SQL Server 如何删除索引? - 使用 `DROP INDEX` 语句删除已存在的索引。 3. 在 SQL Server 存储过程如何实现错误处理机制?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值