Função escalar usada na coluna calculada, qual é a maneira mais limpa de atualizar a função?

10

Quero atualizar uma função escalar em nosso banco de dados. Essa função é usada para várias colunas calculadas em uma tabela de chaves, para que eu receba um erro de dependência se tentar atualizá-lo. Posso remover explicitamente as colunas, atualizar a função e adicioná-las novamente, mas, sem muito trabalho extra, isso mudará a ordem das colunas e poderá ter outras conseqüências não intencionais. Gostaria de saber se havia uma maneira mais limpa de fazê-lo?

robertc
fonte
4
Eu resolvi isso apenas parcialmente criando funções fictícias que chamavam de reais. Obviamente, se a assinatura mudar, tudo estará novamente.
3
Infelizmente, acho que não há nenhuma maneira "mágica" ou "mais limpa" de fazer isso. Se você precisar modificar a função - será necessário soltar as colunas, modificar a função e adicionar novamente todas as colunas. Não há maneira de contornar isso.
marc_s
@marc_s valor do Bem-lhe um tiro, muitas pessoas inteligentes por aqui :)
robertc
Concorde com os comentários acima. Pensei que poderia haver um escopo para os SYNONYMs oferecer alguma ajuda aqui (consulte um SYNONYM na coluna computada) - mas você não pode ALTERAR um sinônimo uma vez criado para "redirecioná-lo" para outro objeto.
AdaTheDev 22/03
11
Ainda longe de ser tão dolorosa como a actualização da definição de um CLR UDT (mesmo quando a mudança é apenas um ajuste a um método e não afeta a representação de armazenamento em tudo)
Martin Smith

Respostas:

2

Isso pode ser mais trabalhoso, mas deve obter (aproximadamente) o que você procura:

1 - Crie uma nova tabela que tenha apenas seu PK a partir da tabela principal e da função atualizada.

2 - Solte sua coluna antiga

3 - Renomeie sua tabela antiga para algo como TableName_Base

4 - Crie um VIEWque junte sua tabela principal à sua tabela de pesquisa, com os campos na ordem em que você deseja vê-los. Atribua um nome à visualização, seja qual for o nome da tabela original.

Isso provavelmente criará alguns problemas com INSERTSe UPDATESembora você tenha acesso por meio de uma visualização. Para lidar com isso, você pode inserir diretamente na tabela, ignorando a visualização.

JNK
fonte
Parece mais trabalho e o mesmo nível de risco que remover e adicionar novamente as colunas.
Robertc # 27/12
11
@robertc Será menos perturbador se este for um ambiente de alta transação, mas sim, ainda é bastante confuso.
JNK