Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

andrerm

Criar procedure

Recommended Posts

Preciso criar uma procedure onde o paramentro irá receber vários códigos que serão utilizados na condição "IN".

Da forma abaixa retorna erro porque o campo código é do tipo smallint e o paramentro é do tipo varchar.

 

CREATE PROCEDURE CONSULTA (

@CODIGOS VARCHAR(50) = 0

)

AS

BEGIN

SELECT

CODIGO,

DESCRIÇÃO

FROM TABELA

WHERE

CDTIPOVALOATIV IN (@CODIGOS)

OR @CDATIVOS = 0

END

 

 

Gostaria se saber se tem alguma forma de transformar o valor do parametro que é por exemplo '1,3,8,12' em 1,3,8,12 ou '1','3','8','12'

 

Ou se tiverem outro sugestão por favor me informem.

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara... nao manjo muito do SQL! Será que não existe tipo um SPLIT ou algo assim?

Dá uma olhada aqui: http://forum.imasters.com.br/index.php?showtopic=223852

 

Abrax!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Berkowitz, usei o post que enviou como base para resolver o meu problema.

Tentei não usar a tabela temporaria mas não vi outro solução, abaixo segue a solução.

 

CREATE PROCEDURE CONSULTA_TIPO_VALOR_ATIVO (

@CDATIVOS VARCHAR(100) = 0

)

AS

BEGIN

DECLARE @ARRAY VARCHAR(1000)

DECLARE @DELIMITADOR VARCHAR(1)

DECLARE @S VARCHAR(50)

 

-- VALORES PASSADOS PARA A VARIAVEL @ARRAY

SELECT @ARRAY = @CDATIVOS

-- SETANDO O DELIMITADOR

SELECT @DELIMITADOR = ','

 

IF LEN(@ARRAY) > 0 SET @ARRAY = @ARRAY + @DELIMITADOR

CREATE TABLE #ARRAY(ITEM_ARRAY VARCHAR(50))

 

WHILE LEN(@ARRAY) > 0

BEGIN

SELECT @S = LTRIM(SUBSTRING(@ARRAY, 1, CHARINDEX(@DELIMITADOR, @ARRAY) - 1))

INSERT INTO #ARRAY (ITEM_ARRAY) VALUES (@S)

SELECT @ARRAY = SUBSTRING(@ARRAY, CHARINDEX(@DELIMITADOR, @ARRAY) + 1, LEN(@ARRAY))

END

 

 

SELECT

CDTIPOVALOATIV,

DCTIPOVALOATIV

FROM TBRS021TIPOVALOATIV

WHERE

CDTIPOVALOATIV IN (SELECT ITEM_ARRAY FROM #ARRAY)

 

DROP TABLE #ARRAY

END

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro,

 

 

Nao sei se você chegou a ler o meu post ( http://forum.imasters.com.br/index.php?showtopic=309118 ) a diferença é que eu precisei usar isso dentro do DTS mais a solução é a mesma ... o que fiz foi isso que você já está fazendo, criei uma procedure, dentro da procedure coloquei um sql que na diretiva IN, eu chamo uma função passando o valor da 'string delimitada por virgula' que me retorna um dado do tipo Table como uma sub-select outra diferença é que minha Table de retorno e do tipo string. Achei mais interessante que criar uma tabela e depois ter de apagá-la.

Agora o detalhe é que essa solução so funciona apartir do SqlServer 2000, o 7 nao tem suporte ao tipo Table para esta construção.

 

Usei esta fonte como referencia. ( http://www.codeproject.com/KB/database/Pass_Array_To_SP.aspx ), se por acaso não for permitido enviar links de outros foruns peço desculpas ao forum.

 

 

Espero ter ajudado. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.