Usuário com melhor resposta
Select com exclusão de coluna

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?
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
Todas as Respostas
-
- Sugerido como Resposta Fulvio Cezar Canducci Dias quarta-feira, 11 de setembro de 2013 19:02
-
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
-
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?
-
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 ,
-
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
-
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