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

Variável Local Recebendo Subquery


arnaldoborges

Pergunta

Olá pessoal, bom dia!

Fiz várias buscas para encontrar uma "luz" para o meu problema, mas não encontrei nada.

Em compensação, encontrei o forum do Script Brasil com uma área destinada apenas para SQL Server, show!

Se alguém puder me ajudar fico extremamente agradecido. Bom, então vamos lá!

Possuo hoje no ambiente de produção a query abaixo, funcionando perfeitamente.

Para que vocês possam entender, a função dela é encontrar o "POST_ID" da tabela "WPTESTE...wp_postmeta", relacionado com o "CRS_CODE" da tabela "tabIntermed_CMS".

Mas se vocês perceberem, na subquery que atribiu valor para a variável "@post_id", eu estou utilizando um "TOP 1", para que ele atribua o primeiro valor encontrado.

Acontece que isso não é o ideal, pois eu posso ter vários "POST_ID" para o mesmo "CRS_CODE", só que claro, se eu retirar o TOP 1, ele vai me retornar erro dizendo que há mais de um valor. E se eu deixar este "TOP 1", perderei todos os demais "POST_ID" (pegarei apenas o primeiro). :wacko:

DECLARE @crs_code VARCHAR(20)
DECLARE CURS CURSOR read_only FOR 

  SELECT crs_code FROM tabIntermed_CMS 

OPEN CURS 

FETCH next FROM CURS INTO @crs_code

WHILE @@FETCH_STATUS = 0 
  BEGIN 
      DECLARE @post_id VARCHAR(20)
      SET @post_id = (
                        SELECT TOP 1 post_id FROM WPTESTE...wp_postmeta 
                        WHERE meta_key LIKE 'crs_code' AND meta_value LIKE @crs_code
                     )
      IF (@post_id <> '')
      PRINT @post_id
      FETCH next FROM CURS INTO @crs_code
  END 

CLOSE CURS 

DEALLOCATE CURS

Minha(s) dúvida(s) é(são) a(s) seguinte(s):

Qual a melhor forma de se fazer isso?

Vocês acreditam que eu vou precisar de outro cursor?

Como ficaria um cursor dentro de outro?

Não sei se deu pra entender a minha situação, se não deu, me avisem que eu explico de outra forma. ^_^

Desde já, fico muitíssimo agradecido pela atenção!

Grande abraço,

Arnaldo.

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

2 respostass a esta questão

Posts Recomendados

  • 0

Buenas Pessoal,

Queimando alguns neurônios, fiz uma gabiarrinha que parece atender as expectativas:

DECLARE @crs_code VARCHAR(20) 
DECLARE curs CURSOR read_only FOR 
  SELECT crs_code 
  FROM   tabintermed_cms 

OPEN curs 

FETCH next FROM curs INTO @crs_code 

WHILE @@FETCH_STATUS = 0 
  BEGIN 
      DECLARE @post_id VARCHAR(20) 

      SELECT @post_id = Min(post_id) 
      FROM   wpteste...wp_postmeta 
      WHERE  meta_key LIKE 'crs_code' 
             AND meta_value LIKE @crs_code 

      WHILE @post_id IS NOT NULL 
        BEGIN 
            SELECT DISTINCT( post_id ) 
            FROM   wpteste...wp_postmeta 
            WHERE  post_id = @post_id 
                   AND meta_key LIKE 'crs_code' 
                   AND meta_value LIKE @crs_code 

            SELECT @post_id = Min(post_id) 
            FROM   wpteste...wp_postmeta 
            WHERE  post_id > @post_id 
                   AND meta_key LIKE 'crs_code' 
                   AND meta_value LIKE @crs_code 

            IF ( @post_id <> '' ) 
              PRINT @post_id 
        END 

      FETCH next FROM curs INTO @crs_code 
  END 

CLOSE curs 

DEALLOCATE curs

Alguém tem uma ideia melhor?

[]'s!

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Arnaldo,

Uma idéia seria fazer uma temporária para armazenar todos os POST_ID que deseja pesquisar. É praticamente a mesma coisa que fez, mas com a temporária creio que a implementação fique mais fácil de dar manutenção e de entender.... :)

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...