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.