Interessante como a cada dia se descobre algo novo, e particularmente motivador quando identificamos na novidade algo interessante para facilitar a vida.
Existe um comando no MS-SQLServer chamado ‘GO‘, normalmente utilizado para encerrar um determinado escopo de código.
Ex.:
SELECT * FROM PESSOA;
GO
Descobri nos últimos dias que o comando GO também pode ser utilizado para designar loops acrescentando simplesmente a quantidade de vezes que deseja que um escopo seja executado no MS-SQLServer.
Imagine que você queira executar um comando para atualizar 200 linhas em uma tabela, mas que de acordo com a regra de négocio, este procedimento não poderá ser executado em massa (todos de uma vez). É necessário utilizar-se de um laço de repetição, normalmente codificado com o auxílio do comando WHILE.
Para exemplificar essa utilização, vou colocar abaixo a mesma tarefa utilizando as duas abordagens para elucubrar o que estou falando e a partir daí fiquem a vontade para decidir a melhor estratégia.
Nos exemplos eu estou simulando uma situação onde eu vou atualizar 1.000 cadastros de pessoa que estão com CPF nulo no banco de dados para o valor ‘000.000.000-00’.
Ex.01: Utilizando WHILE
DECLARE @TABELA TABLE( Id INT IDENTITY(1,1) PRIMARY KEY, IdPessoa INT )
INSERT INTO @TABELA ( IdPessoa )
SELECT IdPessoa FROM Pessoa (NOLOCK) WHERE Cpf is null
DECLARE @IdPessoa INT,
@Cont INT,
@Qtde INT
SET @Cont = 1
SELECT @Qtde = count(*) FROM @TABELA
WHILE @Cont <= @Qtde
BEGIN
SELECT @IdPessoa = IdPessoa FROM @Tabela WHERE Id = @Cont
Update Pessoa
SET Cpf = ‘000.000.000-00’
WHERE IdPessoa = @IdPessoa
SET @Cont = @Cont + 1
END
Simples de entender o procedimento acima não? Agora vamos a mesma tarefa através da segunda abordagem.
Ex.02: Utilizando o comando GO
DECLARE @IdPessoa INT
SELECT top 1 @IdPessoa = IdPessoa FROM Pessoa WHERE Cpf is null
update pessoa set CPF = ‘000.000.000-00’ WHERE IdPessoa= @IdPessoa
GO 1000
Os créditos por esta descoberta vão para Douglas Coé ( @Douglas_Coe ) que repassou a dica.
Boa implementação a todos.
Reblogged this on Vladimir M. B. Magalhães – Learn and Sharee comentado:
Segue uma boa dica de utilização da cláusula “GO”
0 Pingback