locked
Cláusula IN RRS feed

  • Pergunta

  • Tenho uma procedure que recebe como parâmetro @codigo varchar(150), tenho que passar esta proc o código
    Tipo  Produto IN ('500441000008','500140003089','500142003100','509788000009' )

    WHERE 
     Produto. IN (@codigos)


    Como eu faço para executar esta proc?
    Já tentei procProdutos ''500441000008','500140003089','500142003100','509788000009'' - Da erro

    Ou declaro e também da erro
    DECLARE @cod as VARCHAR(150)
    SET @cod =  '1','454546','454546','454546'

    Obrigado

    quarta-feira, 17 de junho de 2009 20:34

Todas as Respostas

  • Ola Eduardo,

    Este assunto é recorrente.

    vc precisa querbrar estes valores com uma funcao ou fazer um query dinamica.
    segue um link onde postei um exemplo.

    http://social.technet.microsoft.com/Forums/pt-BR/520/thread/b55f762e-4edc-402f-a7ce-ea62d2c08eca


    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quarta-feira, 17 de junho de 2009 21:00
  • E como faço a query dinâmica

    Criei a função é quando vou utilizar acontece o erro.


    Server: Msg 208, Level 16, State 1, Line 3
    Invalid object name 'dbo.split_number'.


    Pior que está no banco e como dbo.

    quarta-feira, 17 de junho de 2009 21:33
  • Eduado,

    Existia um erro no meu codigo, ja alterei la no post
    segue script correto

    declare @tabela table (id int,nome varchar(20))
    insert into @tabela values(1,'teste1')
    insert into @tabela values(2,'teste2')
    insert into @tabela values(3,'teste3')
    insert into @tabela values(4,'teste4')
    
    declare @parametro varchar(10)
    set @parametro = '1,2,4'
    SELECT * FROM @tabela WHERE id in (select strval from dbo.split_number(@parametro,','))
    


    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quinta-feira, 18 de junho de 2009 12:06
  • Eduardo pois é, o meu parâmetro é string e não número.
    Eu tenho que chamar deste jeito.

    procProdutosNavegados_ler "'500441000008','500140003089','500142003100','509788000009'"


    Como faço?
    quinta-feira, 18 de junho de 2009 13:08
  • Eduardo,

    vc pode fazer de duas formas:
    1º Alterar a func (ao inves de retornor INT, retornoar VARCHAR(MAX))

    2º Fazer query dinamica

    -- alterar funcao neste trecho
    RETURNS @strtable TABLE (strval	varchar(max))
    
    --alimenta table
    create table #tabela (id int,nome varchar(20))
    insert into #tabela values(1,'teste1')
    insert into #tabela values(2,'teste2')
    insert into #tabela values(3,'teste3')
    insert into #tabela values(4,'teste4')
    --funcao
    declare @parametro varchar(max)
    set @parametro = '''teste1'',''teste2'',''teste4'''
    SELECT * FROM #tabela WHERE nome in (select strval from dbo.split_number(@parametro,','))
    
    --query dinamica
    declare @strSQL varchar(max)
    set @strSQL = 'SELECT * FROM #tabela WHERE nome in ('+@parametro+')'
    exec (@strSQL)
    
    

    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quinta-feira, 18 de junho de 2009 13:25