Posso logicamente reordenar colunas em uma tabela?

votos
77

Se eu estou adicionando uma coluna a uma tabela no Microsoft SQL Server, eu posso controlar onde a coluna é exibida logicamente em consultas?

Eu não quero mexer com o layout físico de colunas no disco, mas eu gostaria de logicamente agrupar colunas juntos quando possível, para que ferramentas como o SQL Server Management Studio listar o conteúdo da tabela de uma forma conveniente.

Eu sei que eu posso fazer isso através de SQL Management Studio, entrando no seu modo design para tabelas e arrastando a ordem das colunas ao redor, mas eu gostaria de ser capaz de fazê-lo em SQL puro para que eu possa realizar a ordenação script a partir da linha de comando.

Publicado 04/08/2008 em 22:37
fonte usuário
Em outras línguas...                            


8 respostas

votos
61

Você não pode fazer isso programaticamente (em uma maneira segura que é) sem criar uma nova tabela.

O Enterprise Manager faz quando você cometer um reordenamento é criar uma nova tabela, mover os dados e, em seguida, excluir a tabela antiga e renomeie a nova tabela para o nome existente.

Se você quiser suas colunas em uma ordem específica / agrupamento sem alterar sua ordem física, você pode criar um ponto de vista que pode ser o que você deseja.

Respondeu 04/08/2008 em 22:54
fonte usuário

votos
35

Eu acho que todo mundo aqui está faltando, é que, embora nem todos têm que lidar com 10'S, 20, ou instâncias do mesmo sistema de software instalados em todo o país e do mundo 1000 de ... aqueles de nós que o design vendido comercialmente software fazê-lo. Como resultado, nós expandir os sistemas ao longo do tempo, expanda tabelas adicionando campos como novo recurso é necessário, e como esses campos são identificados que pertencem a uma tabela existente, e como tal, mais de uma década de expansão, crescendo, adicionando campos, etc às tabelas .... e depois ter que trabalhar com essas tabelas de design, para apoiar, por vezes, para cavar em dados brutos / resolução de problemas para depurar novos bugs funcionalidade .... é incrivelmente agravante de não ter a informação principal que deseja ver dentro do primeiro punhado de campos,

Eu sempre desejei que eu poderia fazer isso, por esta razão exata. Mas curto de fazer exatamente o SQL faz, Construindo um Criar script para uma nova tabela do jeito que eu quero, escrevendo o Inserir para que, em seguida, cair todas as restrições, relacionamentos, chaves, índice existente, etc etc etc da mesa e renomeação existente a mesa "novo" de volta para o nome antigo, e depois de ler todos aqueles chaves, relacionamentos, índice, etc etc ....

Não é apenas tedioso, mas ... em mais de cinco anos demorado, terá de acontecer de novo ....

É tão perto de pena que enorme quantidade de trabalho, no entanto, o ponto é ... não vai ser a última vez que precisam desta capacidade, uma vez que nossos sistemas vão continuar a crescer, expandir e obter campos em um Wacked ordenou impulsionado por adições necessidade / projeto.

A maioria dos desenvolvedores de pensar a partir de um único ponto de vista do sistema que serve uma única empresa ou mercado caixa dura muito específico.

O "off-the-shelf", mas significativamente designers e líderes de desenvolvimento em seu espaço no mercado progressistas sempre terá de lidar com este problema, mais e mais ..... adoraria uma solução criativa, se alguém tem um. Isto poderia facilmente salvar minha empresa uma dúzia de horas por semana, apenas não ter que rolar mais, ou lembrar onde "que" o campo está na tabela de dados de origem ....

Respondeu 01/02/2013 em 01:10
fonte usuário

votos
5

Se entendi sua pergunta, você quer afetar o que as colunas são retornadas primeiro, segundo, terceiro, etc na existentes consultas, certo?

Se todas as suas consultas são escritas com SELECT * FROM TABLE- então eles vão aparecer na saída como eles são dispostos em SQL.

Se as consultas são escritas com SELECT Field1, Field2 FROM TABLE- em seguida, pela ordem em que estão dispostos em SQL não importa.

Respondeu 06/08/2008 em 16:42
fonte usuário

votos
1
  1. Script sua tabela existente para uma janela de consulta.
  2. Executar este script contra um banco de dados de teste (remover a instrução Use)
  3. Use SSMS para fazer a coluna muda o que você precisa
  4. Clique em Gerar Mudança Script (ícone mais e mais abaixo à esquerda na barra de botões, por padrão)
  5. Utilize este script contra a sua mesa real

Tudo o script realmente faz é criar uma segunda tabela tabela com as ordens de colunas desejadas, cópias de todos os dados nele, gotas da tabela original e, em seguida, muda o nome do tabela secundária para tomar seu lugar. Isto conservá-lo escrevendo-se que você deve querer um script de implantação.

Respondeu 08/03/2016 em 14:31
fonte usuário

votos
1

Há uma maneira, mas a sua apenas temporariamente para a própria consulta. Por exemplo,

Vamos dizer que você tem 5 mesas. Tabela é chamadoT_Testing

Nome, sobrenome, PhoneNumber, Email, e MEMBER_ID

você quer que listar sua ID, em seguida, Sobrenome, em seguida, FirstName, em seguida, telefone, em seguida, e-mail.

Você pode fazê-lo de acordo com a Select.

Select Member_ID, LastName, FirstName, PhoneNumber, Email
From T_Testing

Fora isso, se você quiser apenas o sobrenome para mostrar antes do primeiro nome, por algum motivo, você pode fazê-lo também como segue:

Select LastName, *
From T_Testing

A única coisa que você quer ter certeza de que você faz é que o OrderBy ou onde a função precisa ser denotado como Table.Column se você estiver indo para estar usando uma Onde ou OrderBy

Exemplo:

Select LastName, *
From T_Testing
Order By T_Testing.LastName Desc

Espero que isso ajude, eu percebi isso porque eu precisava fazer isso eu mesmo.

Respondeu 06/11/2014 em 18:08
fonte usuário

votos
1

Isso pode ser feito usando SQL, ao modificar as tabelas do sistema diretamente. Por exemplo, veja aqui:

Alterar a tabela - Adicionar nova coluna entre

No entanto, eu não recomendaria a brincar com as tabelas do sistema, a menos que seja absolutamente necessário.

Respondeu 05/10/2008 em 21:34
fonte usuário

votos
1

Quando Management Studio faz isso, é a criação de uma tabela temporária, copiar tudo do outro lado, deixando cair sua tabela original e renomear a tabela temporária. Não há nenhuma declaração equivalente T-SQL simples.

Se você não gosta de fazer isso, você sempre pode criar uma visão da tabela com as colunas na ordem que você gostaria e usar isso?

Edit: batido!

Respondeu 04/08/2008 em 23:00
fonte usuário

votos
0

Não é possível alterar a ordem das colunas sem recriar a tabela inteira. Se você tem alguns exemplos de apenas o banco de dados, você pode usar SSMS para este (Selecione a tabela e clique em "design").

No caso de você ter muitas instâncias de um processo manual, você deve tentar este script: https://github.com/Epaminaidos/reorder-columns

Respondeu 03/09/2016 em 10:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more