none
Declare Variable para utilizar na condição Where IN RRS feed

  • Pergunta

  • Olá,
    Tenho o seguinte sql:

    declare @Cod varchar(100);
    set @Cod = 'Valor1;Valor2';
    
    Select *
    from tabela
    where (cod in @Cod)

    A query acima não funciona quando usa 2 valores separados por ;
    Se uso apenas 1 tudo funciona.

    Como faço para declarar uma variável, informar 2 ou mais valores e utilizar no where IN?

    Isto funciona no REPORTING SERVICES, mas o SQL puro não.

    Obrigado


    [Gosto de compartilhar problemas com soluções que encontro no dia de trabalho]



    • Editado TI DEV quarta-feira, 3 de junho de 2020 11:00
    quarta-feira, 3 de junho de 2020 10:59

Todas as Respostas

  • Bom dia,

    se o o banco for 2016 ou posterior, você pode fazer da sequinte forma

    DECLARE @CODIGO VARCHAR(MAX);
    SET @CODIGO = 'VALOR3;VALOR4';
    
    SELECT VALUE FROM string_split(@CODIGO, ';')
    
    DECLARE @TABELA TABLE
    (
    DESCRICAO VARCHAR(MAX),
    NOME VARCHAR(MAX)
    )
    
    INSERT INTO @TABELA VALUES('TESTE 1', 'VALOR1')
    INSERT INTO @TABELA VALUES('TESTE 2','VALOR2')
    INSERT INTO @TABELA VALUES('TESTE 3', 'VALOR3')
    INSERT INTO @TABELA VALUES('TESTE 4', 'VALOR4')
    INSERT INTO @TABELA VALUES('TESTE 5','VALOR5')
    INSERT INTO @TABELA VALUES('TESTE 6', 'VALOR6')
    
    
    
    SELECT * FROM @TABELA WHERE NOME IN (SELECT VALUE FROM STRING_SPLIT(@CODIGO, ';'))


    PS: para que a função STRING_SPLIT funcione A compatibilidade do banco tem que ser de 130 ou acima;

    Essa configuração fica em propriedades do banco de dados, opções logo abaixo da opção do modelo de recuperação


    quarta-feira, 3 de junho de 2020 11:40
  • Bom dia,

    Toriyama, não sei se é viável no seu caso mas segue uma alternativa utilizando uma variável de tabela para os códigos:

    declare @TabCod table (Cod varchar(100));
    insert into @TabCod values
    ('Valor1'),
    ('Valor2');
    
    Select t.*
    from tabela as t
    where exists (select 1 from @TabCod as c where c.Cod = t.Cod)

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 3 de junho de 2020 12:12