TSQL中for循环的语法是什么?
当前回答
T-SQL中的While循环示例,其中列出了当前月份的开始到结束日期。
DECLARE @Today DATE= GETDATE() ,
@StartOfMonth DATE ,
@EndOfMonth DATE;
DECLARE @DateList TABLE ( DateLabel VARCHAR(10) );
SET @EndOfMonth = EOMONTH(GETDATE());
SET @StartOfMonth = DATEFROMPARTS(YEAR(@Today), MONTH(@Today), 1);
WHILE @StartOfMonth <= @EndOfMonth
BEGIN
INSERT INTO @DateList
VALUES ( @StartOfMonth );
SET @StartOfMonth = DATEADD(DAY, 1, @StartOfMonth);
END;
SELECT DateLabel
FROM @DateList;
其他回答
额外的信息
只是补充一下,因为没有人发布了一个答案,包括如何在循环中迭代数据集。可以使用关键字OFFSET FETCH。
使用
DECLARE @i INT = 0;
SELECT @count= Count(*) FROM {TABLE}
WHILE @i <= @count
BEGIN
SELECT * FROM {TABLE}
ORDER BY {COLUMN}
OFFSET @i ROWS
FETCH NEXT 1 ROWS ONLY
SET @i = @i + 1;
END
这个怎么样:
BEGIN
Do Something
END
GO 10
... 当然,如果需要计数,可以在其中放入增量计数器。
旧线程,但仍然出现,我认为我将为那些需要一个“FOREACH”解决方案。
DECLARE @myValue nvarchar(45);
DECLARE myCursor CURSOR FOR
SELECT [x]
FROM (Values ('Value1'),('Value2'),('Value3'),('Value4'))
as MyTable(x);
OPEN myCursor;
FETCH NEXT FROM myCursor INTO @myValue;
While (@@FETCH_STATUS = 0)
BEGIN
PRINT @myValue
FETCH NEXT FROM myCursor INTO @myValue;
END
CLOSE myCursor;
DEALLOCATE myCursor;
我应该声明一下,在SQL世界中,递归是不受欢迎的。这是有原因的——它对性能非常不利。不过,对于维护/脱机/批量/临时/测试等操作,我经常使用这种方法。
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5)
BEGIN
PRINT @intFlag
SET @intFlag = @intFlag + 1
END
GO
SQL server还没有正式支持For循环。已经有了实现FOR Loop的不同方法的答案。我正在详细回答如何在SQL server中实现不同类型的循环。
FOR循环
DECLARE @cnt INT = 0;
WHILE @cnt < 10
BEGIN
PRINT 'Inside FOR LOOP';
SET @cnt = @cnt + 1;
END;
PRINT 'Done FOR LOOP';
如果你知道,你需要完成循环的第一次迭代,那么你可以尝试DO..WHILE或REPEAT..UNTIL版本的SQL server。
做. . WHILE循环
DECLARE @X INT=1;
WAY: --> Here the DO statement
PRINT @X;
SET @X += 1;
IF @X<=10 GOTO WAY;
重复,直到循环
DECLARE @X INT = 1;
WAY: -- Here the REPEAT statement
PRINT @X;
SET @X += 1;
IFNOT(@X > 10) GOTO WAY;
参考
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- 从现有模式生成表关系图(SQL Server)
- 在Java中,流相对于循环的优势是什么?
- 我如何循环通过一组记录在SQL Server?
- 数据库和模式的区别
- 如何在SQL Server中一次更改多个列
- 增强的for循环中的Null检查
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N