SQL é uma linguagem muito diferente em comparação com o que você está acostumado. É focado no quê , não como . Você diz ao SQL Server quais resultados deseja e deixa-o descobrir como produzir a resposta. Ou, para recarregar o que acabei de dizer - não há um loop for no SQL.
Damien_The_Unbeliever
5
WHILE @I < 10; SET @I = @I + 1; BEGIN; ...; END? No entanto, isso não deve ser usado para a maioria dos processos de consulta (mas às vezes é necessário para manipulação imperativa). Muitas dessas instruções / dicas estão disponíveis no google usando a pesquisa "tsql for loop".
7
Evite loops em favor de JOINs e defina operações.
Oded
2
Se você não é especialista em SQL, não deve considerar usar um loop. Existem apenas algumas condições em que uma é necessária e na maior parte do tempo, usar um laço é o equivalente a empurrar o carro em vez de dirigi-lo. Aprenda a pensar em termos de conjuntos de dados em vez de percorrer os registros. LOoping é uma função de nível especialista, não porque a sintaxe é difícil, mas porque você precisa saber exatamente quanto mal pode causar com ela antes de poder usá-la.
HLGEM
2
Às vezes, ele poderia ser usado para conjurar rapidamente dados de teste em um banco de dados de teste que você excluirá logo em seguida. Nesse caso, usar isso elimina a necessidade de passar por um programa separado, escrito em algo mais como C #, e a engenharia não é uma preocupação importante. Mais uma vez, estou dizendo isso em termos de dados de teste.
JOINs (e operações de conjunto) devem ter preferência sobre construções de loop no SQL.
Oded
6
Não há limite para o estresse (especialmente para aqueles que são novos no SQL), o que Damien disse: "O SQL é uma linguagem muito diferente do que você está acostumado. É focada no que, não como. Você diz ao SQL Server o que resultados que você quer, e deixá-lo descobrir como produzir a resposta ".
ypercubeᵀᴹ
1
É interessante notar que a documentação do MS está errada aqui, realmente. ENQUANTO não usa uma expressão booleana - é necessário um predicado - que, além de poder avaliar como VERDADEIRO ou FALSO, também pode ser DESCONHECIDO.
Damien_The_Unbeliever
360
Não há loop for, apenas o loop while:
DECLARE@i int =0WHILE@i <20BEGINSET@i =@i +1/* do some work */END
Observe que, se você pretende usar o índice no loop, pode querer incrementar a última coisa em vez da primeira, dependendo do seu caso de uso.
precisa saber é o seguinte
3
Observe também que o valor padrão para a variável local não é suportado no SQL simples. Portanto, você precisa separar SET @i = 0antes do loop.
Nux
1
@ Nux: o 0 é definido durante a declaração explicitamente
TcKs
7
Sim, mas isso não funciona em servidores SQL mais antigos (pelo menos não em 2005).
Nux
Além disso, deve-se notar que geralmente o trabalho é feito antes do número inteiro ser incrementado. Muitos loops for SQL realmente usam esse número inteiro em seu trabalho (iterando de linha para linha ou resultam em tabelas temporárias) e podem ser descartados se o incremento ocorrer no início do ciclo e não no final.
CSS
34
Informação extra
Apenas para adicionar como ninguém postou uma resposta que inclui como realmente iterar um conjunto de dados dentro de um loop, você pode usar as palavras-chave OFFSET FETCH .
Uso
DECLARE@i INT =0;SELECT@count= Count(*)FROM{TABLE}WHILE@i <=@count
BEGINSELECT*FROM{TABLE}ORDERBY{COLUMN}
OFFSET @i ROWSFETCH NEXT 1ROWS ONLY
SET@i =@i +1;END
Bem-vindo ao Stack Overflow! Você consideraria adicionar alguma narrativa para explicar por que esse código funciona e o que o torna uma resposta para a pergunta? Isso seria muito útil para a pessoa que fez a pergunta e para qualquer outra pessoa que aparecer.
Andrew Barber
18
Isso é auto-explicativo.
Edward Olamisan 18/06/2015
4
Como isso não é auto-explicativo? Eu tinha a mesma pergunta, entendi a resposta imediatamente.
DanteTheSmith #
1
Como esta resposta difere dos @TcKs, exceto a convenção de nomenclatura?
Sushil Jadhav
7
Que tal agora:
BEGIN
Do Something
END
GO 10
... é claro que você pode colocar um contador incremental dentro dele, se precisar contar.
O loop For ainda não é oficialmente suportado pelo SQL server. Já existe resposta para alcançar as diferentes formas do FOR Loop. Estou detalhando a resposta sobre maneiras de obter diferentes tipos de loops no SQL Server.
Loop FOR
DECLARE@cnt INT =0;WHILE@cnt <10BEGINPRINT'Inside FOR LOOP';SET@cnt =@cnt +1;END;PRINT'Done FOR LOOP';
Se você sabe, você precisa completar primeira iteração do loop de qualquer maneira, então você pode tentar do..while ou repeat..until versão do servidor SQL.
DO..WHILE Loop
DECLARE@X INT=1;
WAY:--> Here the DO statementPRINT@X;SET@X +=1;IF@X<=10GOTO WAY;
Repetir..UNTIL Loop
DECLARE@X INT =1;
WAY:-- Here the REPEAT statementPRINT@X;SET@X +=1;
IFNOT(@X >10)GOTO WAY;
WHILE @I < 10; SET @I = @I + 1; BEGIN; ...; END
? No entanto, isso não deve ser usado para a maioria dos processos de consulta (mas às vezes é necessário para manipulação imperativa). Muitas dessas instruções / dicas estão disponíveis no google usando a pesquisa "tsql for loop".Respostas:
O T-SQL não possui um
FOR
loop, ele possui umWHILE
loopWHILE (Transact-SQL)
fonte
Não há loop for, apenas o loop while:
fonte
SET @i = 0
antes do loop.Informação extra
Apenas para adicionar como ninguém postou uma resposta que inclui como realmente iterar um conjunto de dados dentro de um loop, você pode usar as palavras-chave OFFSET FETCH .
Uso
fonte
fonte
Que tal agora:
... é claro que você pode colocar um contador incremental dentro dele, se precisar contar.
fonte
O loop For ainda não é oficialmente suportado pelo SQL server. Já existe resposta para alcançar as diferentes formas do FOR Loop. Estou detalhando a resposta sobre maneiras de obter diferentes tipos de loops no SQL Server.
Loop FOR
Se você sabe, você precisa completar primeira iteração do loop de qualquer maneira, então você pode tentar do..while ou repeat..until versão do servidor SQL.
DO..WHILE Loop
Repetir..UNTIL Loop
Referência
fonte
Resposta simples é
NO !!
.ENQUANTO :
VAMOS PARA :
Eu sempre prefiro
WHILE
aGOTO
declaração.fonte
Exemplo de loop While em T-SQL, que lista a data de início e término do mês atual.
fonte
Experimente, aprenda:
Com data:
fonte