TSQL中for
循环的语法是什么?
答案 0 :(得分:332)
没有for循环,只有while循环:
DECLARE @i int = 0
WHILE @i < 20
BEGIN
SET @i = @i + 1
/* do some work */
END
答案 1 :(得分:190)
T-SQL没有FOR
循环,它有一个WHILE
循环
WHILE (Transact-SQL)
WHILE Boolean_expression
BEGIN
END
答案 2 :(得分:27)
DECLARE @intFlag INT
SET @intFlag = 1
WHILE (@intFlag <=5)
BEGIN
PRINT @intFlag
SET @intFlag = @intFlag + 1
END
GO
答案 3 :(得分:20)
只是要添加,因为没有人发布了一个答案,其中包括如何实际迭代循环中的数据集,您可以使用关键字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
答案 4 :(得分:7)
这个怎么样:
BEGIN
Do Something
END
GO 10
...当然,如果你需要数数,你可以在里面放一个增量计数器。
答案 5 :(得分:6)
简单回答是 NO !!
。
SQL中没有
FOR
,但您可以使用WHILE
或GOTO
实现FOR
的工作方式。
WHILE:
DECLARE @a INT = 10
WHILE @a <= 20
BEGIN
PRINT @a
SET @a = @a + 1
END
GOTO:
DECLARE @a INT = 10
a:
PRINT @a
SET @a = @a + 1
IF @a < = 20
BEGIN
GOTO a
END
我总是喜欢 WHILE
而不是 GOTO
声明。
答案 6 :(得分:6)
SQL服务器尚未正式支持For循环。已经有answer来实现 FOR 循环的不同方式。我正在详细说明如何在SQL服务器中实现不同类型的循环。
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服务器。< / p>
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;
答案 7 :(得分:0)
在T-SQL中循环示例,列出当前月份的开始日期。
RSpec.configure do |config|
# Tag Rake specs with `:task` metadata or put them in the spec/tasks dir
config.define_derived_metadata(:file_path => %r{/spec/tasks/}) do |metadata|
metadata[:type] = :task
end
config.include TaskExampleGroup, type: :task
config.before(:suite) do
Rails.application.load_tasks
end
end
答案 8 :(得分:0)
尝试一下,学习它:
DECLARE @r INT = 5
DECLARE @i INT = 0
DECLARE @F varchar(max) = ''
WHILE @i < @r
BEGIN
DECLARE @j INT = 0
DECLARE @o varchar(max) = ''
WHILE @j < @r - @i - 1
BEGIN
SET @o = @o + ' '
SET @j += 1
END
DECLARE @k INT = 0
WHILE @k < @i + 1
BEGIN
SET @o = @o + ' *' -- '*'
SET @k += 1
END
SET @i += 1
SET @F = @F + @o + CHAR(13)
END
PRINT @F
带日期:
DECLARE @d DATE = '2019-11-01'
WHILE @d < GETDATE()
BEGIN
PRINT @d
SET @d = DATEADD(DAY,1,@d)
END
PRINT 'n'
PRINT @d