Pergunta

Se eu adicionar uma coluna a uma tabela no Microsoft SQL Server, posso controlar onde a coluna é exibida logicamente nas consultas?

Não quero mexer com o layout físico das colunas no disco, mas gostaria de agrupar colunas logicamente quando possível, para que ferramentas como o SQL Server Management Studio listem o conteúdo da tabela de maneira conveniente.

Eu sei que posso fazer isso através do SQL Management Studio entrando no modo "design" para tabelas e arrastando a ordem das colunas, mas gostaria de poder fazer isso em SQL bruto para poder realizar a ordenação script a partir da linha de comando.

Foi útil?

Solução

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

O que o Enterprise Manager faz quando você confirma uma reordenação é criar uma nova tabela, mover os dados e, em seguida, excluir a tabela antiga e renomear a nova tabela com o nome existente.

Se você deseja que suas colunas estejam em uma ordem/agrupamento específico sem alterar sua ordem física, você pode criar uma visualização que pode ser a que desejar.

Outras dicas

Acho que o que falta a todos aqui é que, embora nem todos tenham que lidar com 10, 20 ou 1000 instâncias do mesmo sistema de software instalado em todo o país e no mundo ...aqueles de nós que projetam software vendido comercialmente o fazem.Como resultado, expandimos os sistemas ao longo do tempo, expandimos tabelas adicionando campos conforme novos recursos são necessários e, à medida que esses campos são identificados, pertencem a uma tabela existente e, como tal, ao longo de uma década de expansão, crescimento, adição de campos, etc. para mesas ....e então ter que trabalhar com essas tabelas desde o design, até o suporte, às vezes pesquisando dados brutos/solução de problemas para depurar novos bugs de funcionalidade ....é extremamente irritante não ter os primeiros dados que você deseja ver nos primeiros campos, quando você pode ter tabelas com 30-40-50 ou mesmo 90 campos e sim em um banco de dados estritamente normalizado.

Muitas vezes desejei poder fazer isso, exatamente por esse motivo.Mas, antes de fazer exatamente o que o SQL faz, construir um script de criação para uma nova tabela do jeito que eu quero, escrever o Insert nela e, em seguida, eliminar todas as restrições, relacionamentos, chaves, índice, etc, etc, existentes da tabela existente e renomear a "nova" tabela de volta ao nome antigo, e depois lendo todas essas chaves, relacionamentos, índice, etc etc....

Não é apenas tedioso e demorado, mas ...daqui a mais cinco anos, precisará acontecer novamente....

Está tão perto de valer a pena tanto trabalho, mas a questão é ...não será a última vez que precisaremos dessa capacidade, já que nossos sistemas continuarão a crescer, a se expandir e a obter campos em uma ordem maluca, impulsionada por acréscimos de necessidade/design.

A maioria dos desenvolvedores pensa a partir de um ponto de vista de sistema único que atende a uma única empresa ou a um mercado de hard box muito específico.

Os designers e líderes de desenvolvimento "prontos para uso", mas significativamente progressistas em seu espaço de mercado, sempre terão que lidar com esse problema, repetidamente... adorariam uma solução criativa, se alguém tiver uma.Isso poderia facilmente economizar uma dúzia de horas por semana para minha empresa, apenas sem precisar rolar ou lembrar onde está o campo "aquele" na tabela de dados de origem....

Se entendi sua pergunta, você deseja afetar quais colunas serão retornadas primeiro, segundo, terceiro, etc. existir perguntas, certo?

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

Se suas consultas forem escritas com SELECT Field1, Field2 FROM TABLE - então a ordem em que são dispostos no SQL não importa.

Quando o Management Studio faz isso, ele cria uma tabela temporária, copia tudo, elimina a tabela original e renomeia a tabela temporária.Não existe uma instrução T-SQL equivalente simples.

Se não quiser fazer isso, você pode criar uma visualização da tabela com as colunas na ordem que desejar e usar isso?

Editar:espancado!

Existe uma maneira, mas é apenas temporariamente para a consulta em si.Por exemplo,

Digamos que você tenha 5 mesas.A tabela é chamada T_Testing

Nome, Sobrenome, Número de telefone, Email e Member_ID

você deseja que ele liste seu ID, depois Sobrenome, Primeiro Nome, Telefone e Email.

Você pode fazer isso conforme o Select.

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

Fora isso, se você quiser apenas que o sobrenome seja exibido antes do nome por algum motivo, você também pode fazer isso da seguinte maneira:

Select LastName, *
From T_Testing

A única coisa que você quer ter certeza de fazer é que a função OrderBy ou Where precisa ser denotada como Table.Column se você for usar um Where ou OrderBy

Exemplo:

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

Espero que isso ajude, descobri porque precisava fazer isso sozinho.

  1. Script de sua tabela existente para uma janela de consulta.
  2. Execute este script em um banco de dados de teste (remova a instrução Use)
  3. Use SSMS para fazer as alterações de coluna necessárias
  4. Clique em Gerar Script de Alterar (mais à esquerda e ícone BottomMost na barra de botão, por padrão)
  5. Use este script em sua mesa real

Tudo o que o script realmente faz é criar uma segunda tabela com as ordens de colunas desejadas, copiar todos os seus dados nela, eliminar a tabela original e renomear a tabela secundária para ocupar seu lugar.Isso evita que você mesmo escreva, caso queira um script de implantação.

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

Alterar tabela - Adicionar nova coluna entre

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

Não é possível alterar a ordem das colunas sem recriar a tabela inteira.Se você tiver apenas algumas instâncias do banco de dados, poderá usar o SSMS para isso (selecione a tabela e clique em "design").

Caso você tenha muitas instâncias para um processo manual, tente este script:https://github.com/Epaminaidos/reorder-columns

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top