Laço While no SQL Server
26/03/2020
0
Boa noite. Gostaria de saber se é possível fazer um laço while utilizando uma tabela do meu BD. O objetivo é percorrer a tabela inteira e caso u teste booleano seja positivo, eu faço um uodate na mesma tabela, mais precisamente, eu quero percorrer a tabela e verificar se uma coluna tem valor '1' em caso positivo, eu faço um update em outra coluna com o valor '0'. vi que da pra usar o while utilizando incremento, mas é possível fazer algo da forma como eu descrevi?
Neio Moutinho
Curtir tópico
+ 0
Responder
Posts
26/03/2020
Emerson Nascimento
é possível.
algo assim:
algo assim:
-- cria as variáveis que receberão o conteúdos -- dos campos da instrução SQL -- obviamente cada variável precisa ser do mesmo tipo -- de dados do campo do qual receberá o conteúdo DECLARE @campo1 int, @campo2 nvarchar(50), @campo3 varchar(80), @campo4 nvarchar(50); -- prepara a instrução que retornará os dados. -- pode usar todos os recursos da linguagem: -- WHERE, JOIN (INNER/LEFT/OUTER/RIGHT), -- GROUP BY, ORDER BY, HAVING -- etc... DECLARE cursor_dados CURSOR LOCAL FOR SELECT CPO1, CPO2, CPO3, CPO4 FROM TABELA WHERE BLA, BLA, BLA ORDER BY BLA, BLA, BLA; -- seleciona os dados e joga na memória OPEN cursor_dados; -- pega os dados da primeira linha da query -- e coloca o conteúdo na variável. -- a ordem das variáveis em INTO deve obedecer -- a ordem dos campos da instrução SQL. FETCH NEXT FROM cursor_dados INTO @campo1, @campo2, @campo3, @campo4; -- enquanto houver dados WHILE @@FETCH_STATUS = 0 BEGIN -- se o conteúdo de @campo1 for igual a 1, atualiza a tabela2 IF (@campo1 = 1) UPDATE TABELA2 SET CAMPOX = 0 WHERE CAMPOA = @campo2 AND CAMPOB = @campo3; -- pega os dados da próxima linha da query FETCH NEXT FROM cursor_dados INTO @campo1, @campo2, @campo3, @campo4; END -- fecha os dados CLOSE cursor_dados; -- libera a memória alocada para os dados DEALLOCATE cursor_dados;
Responder
Clique aqui para fazer login e interagir na Comunidade :)