Estou criando várias exibições de proxy para exibições em um banco de dados separado. Para evitar definir a exibição em dois lugares, quero usar SELECT * para criar a exibição proxy.
Procurei motivos para não fazer isso e não encontrei. Alguém tem uma opinião sobre o uso de SELECT * para uma definição de exibição?
Sim, há motivos para não usar
SELECT *
em uma exibição. O mais importante é que o SQL Server armazena em cache os metadados da saída de uma exibição e não é atualizado magicamente se os objetos subjacentes forem alterados. Aqui está um exemplo rápido para demonstrar:Você precisa forçar o SQL Server a atualizar sua exibição da exibição.
Agora, por que você quer argumentar para usar em uma exibição? Porque você não quer ter que digitar os nomes das colunas uma segunda vez? Você sabia que pode gerar facilmente a lista de colunas do Object Explorer clicando com o botão direito do mouse e dizendo Script View/Table As > SELECT To > clipboard? Ou arrastando a pasta de colunas para a janela de consulta?
SELECT *
Apenas não faça isso. O que você economiza na digitação (e o tempo que você já perdeu debatendo isso) não vale o risco e não justifica ter alguma exceção onde você faz parecer que
SELECT *
está tudo bem. É uma prática ruim por vários motivos, e sair do seu caminho para fazer exceções é inconsistente e muitas vezes pode encorajar a coisa errada para os desenvolvedores juniores.Na verdade, tento me lembrar de criar todas as minhas visualizações
WITH SCHEMABINDING
para que alterá-las mais tarde seja uma dor. Não quero ser capaz de mudar de opinião a torto e a direito precisamente porque essa é uma maneira infalível de quebrar alguma coisa.