Oi, Vander, tudo bem?
Desde já, peço desculpas pela demora em te responder.
Para buscar por mais CPFs, podemos passar todos eles como se fossem uma única e string e, durante o filtro com o WHERE
, separar cada dado para efetuar a atualização.
Para uma melhor compreensão, observe o exemplo abaixo:
ALTER PROCEDURE AtualizarIdade @CPFLista VARCHAR(MAX)
AS
BEGIN
UPDATE [TABELA DE CLIENTES] SET IDADE = DATEDIFF(YEAR, [DATA DE NASCIMENTO], GETDATE())
WHERE CPF IN (SELECT value FROM STRING_SPLIT(@CPFLista, ','))
END
EXEC AtualizarIdade @CPFLista = '1471156710,19290992743'
Inicialmente, alteramos o parâmetro a ser recebido para @CPFLista
, ele será um VARCHAR
com o seu valor máximo. No WHERE
, por outro lado, criamos um filtro que irá analisar se o campo CPF
está contido na busca abaixo:
(SELECT value FROM STRING_SPLIT(@CPFLista, ','))
Por meio da função STRING_SPLIT
, quebramos o valor armazenado na variável @CPFLista
sempre que houver uma vírgula dentro da string. Isso fará com que todos os CPFs fiquem separados e sejam reconhecidos de forma independente.
Nesse sentido, ao executar a procedure AtualizarIdade
, escrevemos @CPFLista = 'CPF1,CPF2,CPF3'
. Os CPFs contidos nesta string serão armazenados e fragmentados durante o processamento da procedure, permitindo o UPDATE
individual de cada registro.
Trazendo para o exemplo que você compartilhou, o comando ficaria assim:
EXEC AtualizarIdade @CPFLista = '1471156710,19290992743'
Como o "separador" da string é a vírgula, precisamos nos atentar com relação ao conteúdo escrito, removendo, por exemplo, espaços desnecessários (que podem afetar a busca).
Vander, espero ter ajudado com a explicação! Caso surjam outras dúvidas, conte comigo.
Um forte abraço!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!