none
Select com exclusão de coluna RRS feed

  • Pergunta

  • Pessoal surgiu uma dúvida que não consegui encontrar solução por exemplo tenho uma tabela com vários campos e essa tabela possui um campo um com o tipo text e preciso realizar um select, pois bem até ai vem minha dúvida como à tabela é extremamente grande e preciso excluir apenas um campo por causa do seu tipo agora vem minha pergunta:

    se eu der select * from materiais virão todas as colunas da minha tabela, porém é possivel executar um select * porém excluindo um tipo especifico de dado ou um campo em especifico?

    quarta-feira, 11 de setembro de 2013 18:53

Respostas

  • Galera da para fazer conforme o antero disse e também por tipo de dados:

    /*PRIMEIRA FORMA POR TIPO*/
    declare @select varchar(max) 
    declare @tabela varchar(max)  
    declare @i Integer 
    set @tabela = 'mt_material'  
    set @select = 'select '  
    SELECT @select = @select + COLUNAS.NAME + ', '  
      FROM  SYSOBJECTS AS TABELAS, sYSCOLUMNS AS COLUNAS, SYSTYPES   AS TIPOS  
     WHERe TABELAS.ID = COLUNAS.ID   
       AND COLUNAS.USERTYPE = TIPOS.USERTYPE   
       AND TABELAS.NAME = @tabela  
       and tipos.name = 'text'  
      
    set @select = @select  
    set @i = len(@select) 
    set @select = SUBSTRING(@select, 1, @i - 1) 
    set @select = @select + ' from ' + @tabela 
     
    execute( @select)
    
    /*SEGUNDA FORMA POR CAMPO*/
    declare @select varchar(max), @campos varchar(max), @tabela varchar(max)
    set @tabela = 'mt_material'
    set @campos = ''
    SELECT @campos = @campos + COLUMN_NAME + ', '
      FROM INFORMATION_SCHEMA.COLUMNS
    	WHERE TABLE_NAME = @tabela
    AND COLUMN_NAME <> 'OBS'
    set @campos = substring(@campos, 1, len(@campos)-1)
    set @select = 'select ' + @campos + ' from ' + @tabela
    exec(@select)

    • Marcado como Resposta eder.luca sexta-feira, 20 de setembro de 2013 15:03
    quarta-feira, 11 de setembro de 2013 20:33

Todas as Respostas

  • Bom, 

    seu eu entendi bem!

    se você tem uma tabela com: Id, Nome e DataNascimento como campos é quer trazar somente Id e Nome

    então coloque

    SELECT Id, Nome FROM Tabela?

    Seria issooo ?


    Fúlvio Cezar Canducci Dias

    quarta-feira, 11 de setembro de 2013 18:55
  • Olá Eder,

    boa tarde.

    Até por questão de desempenho, é sempre bom especificar os campos no select (e não  o *). E seu problema será resolvido apenas omitindo a coluna indesejada. Ex:

    SELECT
     CAMPO1,
     CAMPO3,
     CAMPO4
    FROM
     TABELA;
    

    No exempo, omiti o CAMPO2.

    Att.,


    Wanderson de Paula

    quarta-feira, 11 de setembro de 2013 19:00
  • Sim assim soluciona meu problema mas minha pergunta é a seguinte por exemplo:

    eu tenho uma tabela com 100 colunas, à coluna de número 95 não pode ser retornada no meu select, pois estou gerando um relatório que não precisa dela digamos assim ao invés de adicionar no meu select coluna por coluna manualmente eu gostara de saber se existe alguma forma de se realizar um select * excluindo apenas a coluna que eu não quero, sei que existem outras formas para fazer o que estou relatando acima, mas pergunto isso a titulo de esclarecimento de dúvida, existe algum comando que você adiciona ao seu select o nome ou o tipo de dados que no final à coluna que obedece à esse critério não será exibida?

    quarta-feira, 11 de setembro de 2013 19:01
  • Olha galera não é uma solução tão usual mas se fizer assim quase cheguei em uma solução:

    declare @select varchar(max)
    declare @tabela varchar(max)
    set @tabela = 'mt_material'
    set @select = 'select '
    SELECT @select = @select + COLUNAS.NAME + ', '
      FROM  SYSOBJECTS AS TABELAS, sYSCOLUMNS AS COLUNAS, SYSTYPES   AS TIPOS
     WHERe TABELAS.ID = COLUNAS.ID 
       AND COLUNAS.USERTYPE = TIPOS.USERTYPE 
       AND TABELAS.NAME = @tabela
       and tipos.name <> 'text'
    
    set @select = @select + 'from ' + @tabela
    
    exec @select
    


    Porém no execute ele dá o seguinte erro:

    Mensagem 203, Nível 16, Estado 2, Linha 14
    The name 'select TIPOMERCADORIA, DTATUALIZACAO, COMISSAO, IPI, QTDEEMB, REDUCAO, GONDOLA, ID_MATERIAL, PATOLOGIA, PORCENTPREVSAUDE, SUBGRUPO, CODBARRAS, CODBARRASFRAC, FRACIONAMENTO, PCIVA, PERCDESC, ABC, ALIQUOTA, APRESENTACAO, BALMENSAL, CODICMSANT, CODIFICACAO, USUARIO, RETEMPISCOFINS, STATUS, SUBSTITUICAOVALORNOTA, TIPO, UNIDADE, USOCONTINUO, NEUTRO, NOMECOMPLETO, NUMERO, PREVSAUDE, PRINCIPIOATIVO, REGISTROMS, FORALINHA, GENERICO, GRUPO, GRUPOTERM, LABORATORIO, NEGPOS, CODIGOSERVIMED, CODNBMSH, CONTROLE, CST, DESCRICAO, ENVIARANVISA, CODIGO, CODIGOBRASINDICE, CODIGODCB, CODIGODROGACENTER, CODIGONORDESTEPAULISTA, CODIGOPREVSAUDE, from mt_mater' is not a valid identifier.

    O problema acima gerou pq à ultima coluna ficou com ,

    quarta-feira, 11 de setembro de 2013 19:27
  • Se você quiser seguir essa linha, o código seria este:

    declare @select varchar(max), @campos varchar(max), @tabela varchar(max)
    set @tabela = 'mt_mater'
    set @campos = ''
    SELECT @campos = @campos + COLUMN_NAME + ', '
      FROM INFORMATION_SCHEMA.COLUMNS
    	WHERE TABLE_NAME = @tabela
    AND COLUMN_NAME <> 'CAMPO'
    set @campos = substring(@campos, 1, len(@campos)-1)
    set @select = 'select ' + @campos + ' from ' + @tabela
    exec(@select)
    


    Antero Marques

    quarta-feira, 11 de setembro de 2013 19:51
  • Galera da para fazer conforme o antero disse e também por tipo de dados:

    /*PRIMEIRA FORMA POR TIPO*/
    declare @select varchar(max) 
    declare @tabela varchar(max)  
    declare @i Integer 
    set @tabela = 'mt_material'  
    set @select = 'select '  
    SELECT @select = @select + COLUNAS.NAME + ', '  
      FROM  SYSOBJECTS AS TABELAS, sYSCOLUMNS AS COLUNAS, SYSTYPES   AS TIPOS  
     WHERe TABELAS.ID = COLUNAS.ID   
       AND COLUNAS.USERTYPE = TIPOS.USERTYPE   
       AND TABELAS.NAME = @tabela  
       and tipos.name = 'text'  
      
    set @select = @select  
    set @i = len(@select) 
    set @select = SUBSTRING(@select, 1, @i - 1) 
    set @select = @select + ' from ' + @tabela 
     
    execute( @select)
    
    /*SEGUNDA FORMA POR CAMPO*/
    declare @select varchar(max), @campos varchar(max), @tabela varchar(max)
    set @tabela = 'mt_material'
    set @campos = ''
    SELECT @campos = @campos + COLUMN_NAME + ', '
      FROM INFORMATION_SCHEMA.COLUMNS
    	WHERE TABLE_NAME = @tabela
    AND COLUMN_NAME <> 'OBS'
    set @campos = substring(@campos, 1, len(@campos)-1)
    set @select = 'select ' + @campos + ' from ' + @tabela
    exec(@select)

    • Marcado como Resposta eder.luca sexta-feira, 20 de setembro de 2013 15:03
    quarta-feira, 11 de setembro de 2013 20:33