sqlserver循环语句的使用方式
时间: 2023-08-14 21:05:46 浏览: 181
在 SQL Server 中,有多种循环语句可供使用,包括 WHILE 循环、CURSOR 循环和递归循环等。
1. WHILE 循环
WHILE 循环用于重复执行一组 T-SQL 语句,直到指定的条件不再满足为止。语法如下:
```
WHILE condition
BEGIN
statements
END
```
其中,condition 是循环条件,statements 是要重复执行的 T-SQL 语句。例如,以下代码将计算 1 到 10 的和:
```
DECLARE @sum INT = 0
DECLARE @i INT = 1
WHILE @i <= 10
BEGIN
SET @sum += @i
SET @i += 1
END
SELECT @sum
```
2. CURSOR 循环
CURSOR 循环用于遍历一个结果集,并对每一行执行一组 T-SQL 语句。语法如下:
```
DECLARE cursor_name CURSOR FOR select_statement
OPEN cursor_name
FETCH NEXT FROM cursor_name INTO variables
WHILE @@FETCH_STATUS = 0
BEGIN
statements
FETCH NEXT FROM cursor_name INTO variables
END
CLOSE cursor_name
DEALLOCATE cursor_name
```
其中,cursor_name 是游标的名称,select_statement 是要遍历的 SELECT 语句,variables 是要存储结果集中每一行数据的变量,statements 是要对每一行执行的 T-SQL 语句。例如,以下代码将遍历一个表并输出每一行的数据:
```
DECLARE @id INT, @name VARCHAR(50)
DECLARE cursor_name CURSOR FOR
SELECT id, name FROM table_name
OPEN cursor_name
FETCH NEXT FROM cursor_name INTO @id, @name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT CONCAT('ID: ', @id, ', Name: ', @name)
FETCH NEXT FROM cursor_name INTO @id, @name
END
CLOSE cursor_name
DEALLOCATE cursor_name
```
3. 递归循环
递归循环用于重复执行一组 T-SQL 语句,直到达到指定的递归深度为止。语法如下:
```
WITH recursive_cte AS (
select_statement -- 初始查询语句
UNION ALL
select_statement -- 递归查询语句
)
SELECT * FROM recursive_cte
```
其中,select_statement 是初始查询语句和递归查询语句,recursive_cte 是递归公共表表达式的名称。例如,以下代码将使用递归循环计算一个数的阶乘:
```
WITH recursive_cte AS (
SELECT 1 AS n, 1 AS factorial
UNION ALL
SELECT n + 1, factorial * (n + 1) FROM recursive_cte WHERE n < 9
)
SELECT factorial FROM recursive_cte WHERE n = 9
```
以上是 SQL Server 中循环语句的使用方式,可以根据需要灵活运用。需要注意的是,循环语句可能会降低性能,应尽量使用集合操作而不是循环来处理数据。
阅读全文
相关推荐














