Todos sabemos que para selecionar todas as colunas de uma tabela, podemos usar
SELECT * FROM tableA
Existe uma maneira de excluir colunas de uma tabela sem especificar todas as colunas?
SELECT * [except columnA] FROM tableA
A única maneira que eu sei é especificar manualmente todas as colunas e excluir a coluna indesejada. Isso consome muito tempo, então estou procurando maneiras de economizar tempo e esforço nisso, bem como manutenção futura, caso a tabela tenha mais / menos colunas.
sql
sql-server
tsql
pb2q
fonte
fonte
SELECT *
consulta (o OLE DB tem problemas para mapear essas). Não pude especificar as colunas corretas porque não tinha acesso direto ao banco de dados MySQL, no entanto, o SQL Server teve a gentileza de me informar os nomes das colunas char de largura fixa ...SELECT DISTINCT *
exceto para a coluna-chave funcionar sem linhas duplicadas que alguém mais criouRespostas:
Eu concordo com todos ... mas se eu fosse fazer algo assim, poderia fazê-lo desta maneira:
fonte
SELECT table1.ID AS table1ID ...
, IIRC.Não.
A prática recomendada da luz de manutenção é especificar apenas as colunas necessárias.
Pelo menos 2 razões:
Editar (julho de 2011):
Se você arrastar do
Columns
nó do Pesquisador de objetos para uma tabela, ele colocará uma lista CSV de colunas na janela de consulta para você, que alcançará uma de suas metasfonte
Se você não quer escrever o nome de cada coluna manualmente, você pode usar
Script Table As
o botão direito sobre a tabela ou vista em SSMS como este:Em seguida, você receberá toda a consulta de seleção na janela do novo editor de consultas e removerá a coluna indesejada como esta:
Feito
fonte
A maneira automatizada de fazer isso no SQL (SQL Server) é:
fonte
row_number()
a cada linha, depois realizar uma junçãorow_number
e selecionar tudo, excetorow_number
o resultado da junção.Você pode criar uma exibição com as colunas que deseja selecionar e, a
select *
partir da exibição, pode ...fonte
Sim, é possível (mas não recomendado).
Explicação do código :
SELECT @variable = @variable + ... FROM
para concatenar os nomes das colunas. Esse tipo deSELECT
não retorna um conjunto de resultados. Talvez esse seja um comportamento não documentado, mas funciona em todas as versões do SQL Server. Como alternativa, você pode usarSET @variable = (SELECT ... FOR XML PATH(''))
para concatenar seqüências de caracteres.ISNULL
função para acrescentar uma vírgula apenas se este não for o primeiro nome da coluna. Use aQUOTENAME
função para suportar espaços e pontuação nos nomes das colunas.WHERE
cláusula para ocultar colunas que não queremos ver.EXEC (@variable)
, também conhecido como SQL dinâmico , para resolver os nomes das colunas em tempo de execução. Isso é necessário porque não sabemos os nomes das colunas no momento da compilação.fonte
SELECT @columns FROM contact
Como os outros disseram, não há como fazer isso, mas se você estiver usando o Sql Server, um truque que eu uso é alterar a saída para separada por vírgula.
e recorte toda a lista de colunas da janela de saída. Depois, você pode escolher quais colunas deseja, sem precisar digitar todas elas.
fonte
Basicamente, você não pode fazer o que gostaria - mas pode obter as ferramentas certas para ajudá-lo a facilitar um pouco as coisas.
Se você olhar para o prompt SQL da Red-Gate , poderá digitar "SELECT * FROM MyTable" e, em seguida, mover o cursor para trás após o "*" e pressionar <TAB> para expandir a lista de campos e remover os poucos campos que você deseja. não precisa.
Não é uma solução perfeita - mas muito boa! :-) Pena que o Intellisense do MS SQL Server Management Studio ainda não é inteligente o suficiente para oferecer esse recurso .......
Marc
fonte
não, não há como fazer isso. talvez você possa criar visualizações personalizadas, se isso for possível na sua situação
EDIT Pode ser que seu banco de dados suporte a execução de sql dinâmico, você poderia escrever um SP e passar as colunas que você não quer ver e deixá-lo criar a consulta dinamicamente e retornar o resultado para você. Eu acho que isso é possível no SQL Server pelo menos
fonte
Se você estiver usando o SQL Server Management Studio, faça o seguinte:
Aproveitar.
fonte
No SQL Management Studio, você pode expandir as colunas no Pesquisador de Objetos e arrastar o
Columns
item da árvore para uma janela de consulta para obter uma lista de colunas separadas por vírgula.fonte
Em resumo, você não pode fazê-lo, mas eu discordo de todos os comentários acima, "há" cenários em que você pode legitimamente usar um * Quando você cria uma consulta aninhada para selecionar um intervalo específico de uma lista inteira (como paginação) por que no mundo gostaria de especificar cada coluna na instrução de seleção externa quando você a fez no interior?
fonte
ATUALIZAR:
Você também pode criar um procedimento armazenado para cuidar dessa tarefa, se a usar com mais frequência. Neste exemplo, usei o STRING_SPLIT () que está disponível no SQL Server 2016 ou superior, mas se você precisar, existem muitos exemplos de como criá-lo manualmente no SO.
E então apenas:
fonte
Se estamos falando de Procedimentos, ele trabalha com esse truque para gerar uma nova consulta e EXECUTE IMEDIATA :
fonte
Usando SQL declarativo da maneira usual, não.
Eu acho que a sintaxe proposta é válida e boa. De fato, a linguagem de banco de dados relacional 'Tutorial D' tem uma sintaxe muito semelhante, onde as palavras-chave
ALL BUT
são seguidas por um conjunto de atributos (colunas).No entanto, o SQL
SELECT *
já recebe muitas críticas (a resposta de @ Guffa aqui é uma objeção típica), então não acho queSELECT ALL BUT
entrará no SQL Standard tão cedo.Eu acho que a melhor solução é criar um
VIEW
com apenas as colunas que você desejaSELECT * FROM ThatView
.fonte
select *
é questionável - muito útil para coisas e programas ad hoc que precisam lidar genericamente com tabelas de dados, mas não tanto para construir (na falta de uma palavra melhor) consultas 'puras'. Ainda assim, não estar no padrão ANSI não significa que a Microsoft não possa adicioná-lo ao dialeto, como em muitas outras coisas, mas estou cético quanto a isso.Um dialeto SQL moderno como o BigQuery propõe uma excelente solução
Essa é uma sintaxe SQL muito poderosa para evitar uma longa lista de colunas que precisam ser atualizadas o tempo todo devido a alterações no nome da coluna da tabela. E essa funcionalidade está ausente na implementação atual do SQL Server, o que é uma pena. Felizmente, um dia, o Microsoft Azure será mais amigável para cientistas de dados.
Os cientistas de dados gostam de poder ter uma opção rápida para encurtar uma consulta e remover algumas colunas (devido a duplicação ou qualquer outro motivo).
https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#select-modifiers
fonte
O Postgres sql tem uma maneira de fazê-lo
os pls referem-se: http://www.postgresonline.com/journal/archives/41-How-to-SELECT-ALL-EXCEPT-some-columns-in-a-table.html
O esquema do esquema de informações
O exemplo acima para minha tabela de exemplo específica - gera uma instrução sql que se parece com isso
SELECIONE o.officepark, o.owner, o.squarefootage FROM officepark Como o
fonte
Eu não conheço nenhum banco de dados que suporte isso (SQL Server, MySQL, Oracle, PostgreSQL). Definitivamente não faz parte dos padrões SQL, então acho que você deve especificar apenas as colunas que deseja.
Obviamente, você pode construir sua instrução SQL dinamicamente e pedir ao servidor que a execute. Mas isso abre a possibilidade de injeção de SQL.
fonte
Sei que isso é um pouco antigo, mas acabei de encontrar o mesmo problema e estava procurando uma resposta. Então, um desenvolvedor sênior me mostrou um truque muito simples.
Se você estiver usando o editor de consultas do studio de gerenciamento, expanda o banco de dados e expanda a tabela que você está selecionando para poder ver a pasta de colunas.
Na sua instrução select, apenas realce a pasta de colunas referenciadas acima e arraste e solte-a na janela de consulta. Ele colará todas as colunas da tabela e, em seguida, basta remover a coluna de identidade da lista de colunas ...
fonte
SELECT * Except(tableName.ColumnName) FROM ...
A melhor maneira de resolver isso é usando o view, você pode criar o view com as colunas necessárias e recuperar os dados
fonte
Se você deseja excluir uma coluna de maiúsculas e minúsculas, como a senha, por exemplo, faço isso para ocultar o valor:
SELECT * , "" as password FROM tableName;
fonte
Bem, é uma prática recomendada comum especificar quais colunas você deseja, em vez de apenas especificar *. Portanto, você deve apenas indicar quais campos você deseja que sua seleção retorne.
fonte
Um colega aconselhou uma boa alternativa:
Feito...
Isso nos ajudou muito.
fonte
Clique com o botão direito do mouse na tabela no Pesquisador de Objetos, selecione as 1000 principais linhas
Ele listará todas as colunas e não *. Em seguida, remova as colunas indesejadas. Deve ser muito mais rápido do que digitar você mesmo.
Então, quando achar que isso é um pouco trabalhoso, obtenha o SQL Prompt do Red Gate e digite ssf de tbl, vá para o * e clique na guia novamente.
fonte
Que o que eu uso frequentemente para este caso:
@colnames
parececolumn1,column2,column5
fonte
Às vezes, o mesmo programa deve lidar com diferentes estruturas de banco de dados. Portanto, não pude usar uma lista de colunas no programa para evitar erros no
select
instruções.*
me dá todos os campos opcionais. Verifico se os campos existem na tabela de dados antes do uso. Esta é a minha razão para usar*
emselect
.É assim que eu manejo campos excluídos:
fonte
Sei que esta pergunta é antiga, mas espero que ainda possa ser útil. A resposta é inspirada em uma discussão nos Fóruns do SQL Server . Você pode fazer disso um procedimento armazenado . Também pode ser modificado para adicionar mais de um, exceto campos.
fonte
Não seria mais simples fazer isso:
-Clique na coluna 'Nome_da_coluna'> Copiar> Colar (cria uma lista vertical) em uma janela Nova consulta e digite apenas vírgulas na frente do valor de cada coluna ... comente as colunas que você não deseja ... muito menos digitando do que qualquer código oferecido aqui e ainda gerenciável.
fonte
Você pode obter o SQL Complete no devart.com, que não apenas expande o curinga *, como o Prompt do SQL do Red Gate (como descrito na resposta do cairnz), mas também fornece um seletor de colunas suspenso com caixas de seleção nas quais é possível verificar todas as colunas que você deseja na lista de seleção e elas serão inseridas automaticamente para você (e se você desmarcar uma coluna, ela será automaticamente removida da lista de seleção).
fonte
No SSMS, existe uma maneira mais fácil com IntelliSense e Aliasing . Tente isto
fonte