Se eu estiver adicionando 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 do disco, mas gostaria de agrupar logicamente as colunas, 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 por meio do SQL Management Studio entrando em seu modo de "design" para tabelas e arrastando a ordem das colunas, mas gostaria de poder fazer isso em SQL bruto para poder realizar a ordenação com script da linha de comando.
sql-server
fastcall
fonte
fonte
Respostas:
Você não pode fazer isso programaticamente (de uma forma 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 então 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 o que você desejar.
fonte
Acho que o que está faltando a todos aqui é que, embora nem todos tenham que lidar com instâncias de 10, 20 ou 1000 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 as tabelas adicionando campos conforme um novo recurso é necessário e, conforme esses campos são identificados, pertencem a uma tabela existente e, como tal, mais de uma década de expansão, crescimento, adição de campos, etc. às tabelas ... e então ter que trabalhar com essas tabelas desde o design, até o suporte, às vezes cavando em dados brutos / solução de problemas para depurar novos bugs de funcionalidade ... é incrivelmente agravante não ter as informações primárias que você deseja veja dentro do primeiro punhado de campos,
Muitas vezes desejei poder fazer isso, exatamente por esse motivo. Mas, sem fazer exatamente o que o SQL faz, construir um script de criação para uma nova tabela da maneira que eu quero, escrever o Insert nela e, em seguida, eliminar todas as restrições existentes, relacionamentos, chaves, índice, etc etc etc da tabela existente e renomear a "nova" tabela de volta ao nome antigo e, em seguida, lendo todas as chaves, relacionamentos, índice, etc etc ....
Não é apenas tedioso, demorado, mas ... em mais cinco anos, precisará acontecer novamente ....
É tão perto de valer a pena essa enorme quantidade de trabalho, no entanto, o ponto é ... não será a última vez que precisaremos dessa capacidade, já que nossos sistemas continuarão a crescer, expandir e obter campos em uma ordem maluca conduzida por necessidade / design adições.
A maioria dos desenvolvedores pensa do ponto de vista de um único sistema que atende a uma única empresa ou a um mercado de caixas rígidas muito específico.
Os designers e líderes de desenvolvimento "prontos para uso", mas significativamente progressivos em seu espaço de mercado, sempre terão que lidar com esse problema, continuamente ... adorariam uma solução criativa, se houver algum. Isso poderia facilmente economizar para minha empresa uma dúzia de horas por semana, simplesmente não tendo que rolar ou lembrar onde "aquele" campo está na tabela de dados de origem ....
fonte
FieldID Guid
,OrderBy int
. Feito. Então SSMS ouSELECT *
usa isso. Desligue-o se você for um DBA perfeito e não quiser. Muito frustrante. E agora minhas mesas são grandes o suficiente para que eu não possa mais usar força bruta.Se entendi sua pergunta, você quer afetar o que as colunas são retornadas primeiro, segundo, terceiro, etc em vigor consultas , certo?
Se todas as suas consultas forem escritas com
SELECT * FROM TABLE
- então elas aparecerão na saída conforme são apresentadas no SQL.Se suas consultas são escritas com
SELECT Field1, Field2 FROM TABLE
- então a ordem em que são apresentadas no SQL não importa.fonte
Quando o Management Studio faz isso, ele está criando uma tabela temporária, copiando tudo, descartando sua tabela original e renomeando a tabela temporária. Não existe uma instrução T-SQL equivalente simples.
Se você não gosta de fazer isso, pode sempre criar uma visualização da tabela com as colunas na ordem que deseja e usar?
Editar: derrotado!
fonte
Existe uma maneira, mas é apenas temporariamente para a própria consulta. Por exemplo,
Digamos que você tenha 5 mesas. Tabela é chamada
T_Testing
FirstName, LastName, PhoneNumber, Email e Member_ID
você deseja que ele liste o ID, o sobrenome, o nome, o telefone e o e-mail.
Você pode fazer isso de acordo com o Select.
Além disso, se você quiser apenas que o sobrenome apareça antes do nome por algum motivo, você também pode fazer da seguinte maneira:
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:
Espero que isso ajude, descobri porque precisava fazer isso sozinho.
fonte
Tudo o que o script realmente faz é criar uma segunda tabela de tabela com as ordens de coluna desejadas, copiar todos os seus dados nela, descartar a tabela original e, em seguida, renomear a tabela secundária para ocupar seu lugar. Isso evita que você o escreva sozinho, se quiser um script de implantação.
fonte
Isso pode ser feito usando SQL, modificando as tabelas do sistema diretamente. Por exemplo, veja aqui:
Alterar tabela - Adicionar nova coluna entre
No entanto, eu não recomendaria jogar com tabelas de sistema, a menos que seja absolutamente necessário.
fonte
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, pode usar o SSMS para isso (selecione a tabela e clique em "design").
Caso você tenha muitas instâncias para um processo manual, você deve tentar este script: https://github.com/Epaminaidos/reorder-columns
fonte