Ir para conteúdo
Fórum Script Brasil
  • 0

ajuda com Procedure


Guest --Caio --

Pergunta

Boa tarde Senhores,

vou tentar explicar com minhas palavras, mas acredito que o exemplo que segue abaixo seja auto explicativo.

Uso a variavel @ESTAB para montar uma select, e ela me retorna (SELECT LEFT('003 - CL 1',3)+','+LEFT('004 - JC 2',3)+','+LEFT('006 - SH 2',3))

porém eu só quero o valor que este select me retorno ('003','004','006')

como eu faço pra jogar isso dentro de uma variavel?

DECLARE @LOJA VARCHAR(100),@ESTAB VARCHAR(100),@SQL VARCHAR(100)

SET @LOJA = '003 - CL 1#004 - JC 2#006 - SH 2'

SET @ESTAB = ('SELECT LEFT('+ CHAR(39) + REPLACE(@LOJA,'#' , CHAR(39) + ',3)+'+CHAR(39) + ','+CHAR(39) +'+LEFT(' + CHAR(39)) + CHAR(39) +',3)')

SET @SQL = SELECT (@ESTAB)

SELECT(@SQL)

abraços!!

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

:mellow: Cara não é isso q quero.....

preciso do resultado q essa select me retorna....

('SELECT LEFT('+ CHAR(39) + REPLACE(@LOJA,'#' , CHAR(39) + ',3)+'+CHAR(39) + ','+CHAR(39) +'+LEFT(' + CHAR(39)) + CHAR(39) +',3)')

abcs....

Link para o comentário
Compartilhar em outros sites

  • 0

Posso ter compreendido mal ou estar viajando mas você que executar o conteúdo da varia´vel @ESTAB?

Sugiro o EXEC() como no exemplo a seguir:

DECLARE @LOJA VARCHAR(100),@ESTAB VARCHAR(100),@SQL VARCHAR(100)
SET @LOJA = '003 - CL 1#004 - JC 2#006 - SH 2'
SET @ESTAB = ('SELECT LEFT('+ CHAR(39) + REPLACE(@LOJA,'#' , CHAR(39) + ',3)+'+CHAR(39) + ','+CHAR(39) +'+LEFT(' + CHAR(39)) + CHAR(39) +',3)')

--SET @SQL = SELECT (@ESTAB)

--SELECT(@SQL)

EXEC(@ESTAB)

Se estou falando bobagens desculpa ai. :P

Editado por jothaz
Link para o comentário
Compartilhar em outros sites

  • 0
Posso ter compreendido mal ou estar viajando mas você que executar o conteúdo da varia´vel @ESTAB?

Sugiro o EXEC() como no exemplo a seguir:

DECLARE @LOJA VARCHAR(100),@ESTAB VARCHAR(100),@SQL VARCHAR(100)
SET @LOJA = '003 - CL 1#004 - JC 2#006 - SH 2'
SET @ESTAB = ('SELECT LEFT('+ CHAR(39) + REPLACE(@LOJA,'#' , CHAR(39) + ',3)+'+CHAR(39) + ','+CHAR(39) +'+LEFT(' + CHAR(39)) + CHAR(39) +',3)')

--SET @SQL = SELECT (@ESTAB)

--SELECT(@SQL)

EXEC(@ESTAB)

Se estou falando bobagens desculpa ai. :P

então cara.....

é quase isso....

mas eu quero jogar o resultado q eu obter com o exec(@estab) em outra variavel.

sei q não funciona. mas seria alguma coisa do tipo:

SET @SQL = exec(@ESTAB)

vlw!"

abraçao!

Link para o comentário
Compartilhar em outros sites

  • 0
Sem querer ser chato, porém já sendo, porque precisa em variavel?

Não podeira ser um uma tabela temporária?

Qual versão do SQL utilizas?

Cara não pensei nisso....

é q na verdade vou usar isso pra outra coisa maior,

montei uma sp mas euy estouro o tamanho da variavel (8000 caracteres)

e uma das formas q achei pra reduzir o tamanho foi essa,

fazer o tratamento antes e jogar na variavel q monto o select só o que me interessa.....

bem...

não estou em casa

mas vou testar sua ideia!

obrigado!

abraçao!

Link para o comentário
Compartilhar em outros sites

  • 0

POOTS CARA....

AINDA não FOI ISSO Q RESOLVEU MEU PROBLEMA....

CRIEI A TABELA TEMPORARIA, CONSEGUI ARMAZENAR O Q EU QUERO, MAS QUANDO OU FAZER A COMPARAÇÃO ELE não ME RETORNA nada...

DECLARE @LOJA VARCHAR(100),@ESTAB VARCHAR(100),@SQL VARCHAR(100)

SET @LOJA = '003 - CL 1#004 - JC 2#006 - SH 2'

CREATE TABLE #LOJAS (LOJAS VARCHAR(100))

SET @ESTAB = ('INSERT INTO #LOJAS VALUES( LEFT('+ CHAR(39) + REPLACE(@LOJA,'#' , CHAR(39) + ',3)+'+CHAR(39) + ','+CHAR(39) +'+LEFT(' + CHAR(39)) + CHAR(39) +',3))' )

--SELECT(@estab)

EXEC (@ESTAB)

SELECT DESCRICAO

FROM LOJAS

WHERE CODIGO IN (SELECT * FROM #LOJAS)

ABCS

Link para o comentário
Compartilhar em outros sites

  • 0

não preciso de join ali cara.....

eu quero pegar tudo q estiver na tabela #LOJAS,

e outra meu problema é: ela vai me retornar as 3 lojas como se fosse apenas um unico caracter '003,004,006'

SEGUE O EXEMPLO(SIMPLIFICADO) DO QUE EU QUERO FAZER

CREATE TABLE LOJA(

COD VARCHAR(3),

DESCRICAO VARCHAR(100))

INSERT INTO LOJA VALUES ('001', 'LOJA 001')

INSERT INTO LOJA VALUES ('002', 'LOJA 002')

INSERT INTO LOJA VALUES ('003', 'LOJA 003')

INSERT INTO LOJA VALUES ('004', 'LOJA 004')

INSERT INTO LOJA VALUES ('005', 'LOJA 005')

INSERT INTO LOJA VALUES ('006', 'LOJA 006')

DECLARE @LOJA VARCHAR(200),@ESTAB VARCHAR(200)

SET @LOJA = ('003 - LOJA 003#004 - LOJA 004#006 - LOJA 006')

DROP TABLE #LOJAS

CREATE TABLE #LOJAS (LOJAS VARCHAR(100))

SET @ESTAB = ('INSERT INTO #LOJAS VALUES( LEFT('+ CHAR(39) + REPLACE(@LOJA,'#' , CHAR(39) + ',3)+'+CHAR(39) + ','+CHAR(39) +'+LEFT(' + CHAR(39)) + CHAR(39) +',3))' )

--SELECT(@estab)

EXEC (@ESTAB)

SELECT * FROM LOJA L1

WHERE COD IN (SELECT * FROM #LOJAS L2)

Link para o comentário
Compartilhar em outros sites

  • 0

Não entedi o que você quer muito bem mas sou lerdo mesmo.

Se é lista o conteúdo da tabela temporária use isto:

SELECT * FROM #LOJAS_TEMP

quanto ao retorno: 003,004,006 se for o retonro que você quer depois separamos ele.

Primeiro faça retorna o que queres deposi separamos.

OK?

E despulpe-me por não captar bem o que queres fazer!

Link para o comentário
Compartilhar em outros sites

  • 0

desculpa cara!

eu q sou muito ruim pra explicar.....

o que acontece....

eu tenho as lojas na tabela LOJA (003,004,005,006)

enfim, esta é a tabela q armazeno as lojas.

eu tenho um relatório em que o usuario pode escolher n lojas,

essa lojas passo como parametro para uma SP separadas por # (003 - loja 003#004 - loja 004#006 - loja 006)

antes para pegar o código da loja eu fazia o tratamento direto na query, mas a query cresceu e se escolho mtas lojas estoura o tamanho da variavel,

por isso resolvi jogar o tratamento das lojas em outra variavel e assim eu economizaria caracteres

mas como você esta vendo estou apanhando pra fazer isso.... =\

SIM 003,004,006

é o que quero retornar....

agora preciso separa-los...

abrçao!

e desculpa

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...