Inquiridor
Cláusula IN

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