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