código

23 abr, 2025

Como receber vários parâmetros separados por ponto e vírgula?

Publicidade

Olá pessoal, meu nome Mauricio Junior e hoje eu vou te falar como receber vários parâmetros separados por vírgula ou ponto e vírgula e o select fazer a separação de forma inteligente usando o IN dentro do seleção sem fazer FOR ou usar cursor.

Problema

O problema que eu tenho é: o cliente vai mandar valores separados por ponto e vírgula, por exemplo: VALOR1; VALOR2; VALOR3; VALOR4; e eu preciso separados os dados para fazer a busca dentro do select.

Solução

Existe um comando dentro do SQL Server chamado STRING_SPLIT que serve para separar os dados recebidos pelo valor que você precisa e eu posso colocar o resultado dentro da seleção com IN. Veja o código 1.

Código 1 – Usando o STRING_PLIT

SELECT value FROM STRING_SPLIT(@parametros, ';')

O código 1 mostra o comando específico e agora eu preciso colocar ele dentro do Select que irei usar, mas antes vou te mostrar um exemplo simples.

Código 2 – Colocando o STRING_PLIT dentro do IN.

Veja o código 2. Note que o value retornado do select equivale ao valor separado para forma o dado que pode ser usado no IN que eu preciso.

SELECT 
    Campo1,
    Campo2,
    Campo3
FROM
    Tabela
WHERE
    Campo1 IN
    (
        SELECT value FROM STRING_SPLIT(@parametros, ';')
    )
ORDER BY Campo2;

Simples assim, seleciono os campos (campo1, campo2 e campo3) da tabela onde o campo1 vai buscar os valores retornados do STRING_PLIT. Esse é o segredo! Isso pode ser usado dentro de um select normal e dentro de uma stored procedure.

Código 3 – Executando com parâmetros

No código 3, eu já mostro os parâmetros informados através de variável e como ela vai funcionar. 

DECLARE @parametros NVARCHAR(MAX);

SET @parametros = 'VALOR1;VALOR2;VALOR3';

SELECT 
    Campo1,
    Campo2,
    Campo3
FROM
    Tabela
WHERE
    Campo1 IN
    (
        SELECT value FROM STRING_SPLIT(@parametros, ';')
    )
ORDER BY Campo2;

Espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.net