Fonction scalaire utilisée dans la colonne calculée, quelle est la façon la plus propre de mettre à jour la fonction?

10

Je veux mettre à jour une fonction scalaire dans notre base de données. Cette fonction est utilisée pour plusieurs colonnes calculées dans une table de clés, donc j'obtiens une erreur de dépendance si j'essaie de la mettre à jour. Je peux explicitement supprimer les colonnes, mettre à jour la fonction et rajouter les colonnes mais, sans beaucoup de détails supplémentaires, cela changera l'ordre des colonnes et pourrait avoir d'autres conséquences inattendues. Je me demandais s'il y avait une façon plus propre de le faire?

robertc
la source
4
Je n'ai résolu cela qu'en partie en créant des fonctions factices appelant de vraies. Bien sûr, si la signature change, alors tout recommence.
3
Malheureusement, je ne pense pas qu'il existe une façon "magique" ou "plus propre" de procéder. Si vous devez modifier la fonction - vous devrez supprimer les colonnes, modifier la fonction et rajouter toutes les colonnes. Pas question.
marc_s
@marc_s Eh bien, ça vaut le coup, beaucoup de gens intelligents ici :)
robertc
Acceptez les commentaires ci-dessus. Je pensais que les SYNONYMES pouvaient offrir de l'aide ici (référencer un SYNONYME dans la colonne calculée) - mais vous ne pouvez pas MODIFIER un synonyme une fois créé pour le "rediriger" vers un autre objet.
AdaTheDev
1
Toujours aussi pénible que la mise à jour de la définition d'un CLR UDT (même lorsque le changement n'est qu'un ajustement d'une méthode et n'affecte pas du tout la représentation du stockage)
Martin Smith

Réponses:

2

Cela peut être plus de travail mais cela devrait obtenir (approximativement) ce que vous recherchez:

1 - Créez une nouvelle table qui a juste votre PK à partir de la table principale et de la fonction mise à jour.

2 - Déposez votre ancienne colonne

3 - Renommez votre ancienne table en quelque chose comme TableName_Base

4 - Créez un VIEWqui joint votre table principale à votre table de recherche, avec les champs dans l'ordre où vous souhaitez les voir. Nommez la vue quel que soit le nom de votre table d'origine.

Cela créera potentiellement des problèmes avec INSERTSet UPDATESpuisque vous y accéderez via une vue. Pour y faire face, vous pouvez soit insérer directement dans le tableau, en contournant la vue.

JNK
la source
Cela ressemble à plus de travail et au même niveau de risque que la suppression et l'ajout de colonnes.
robertc
1
@robertc Ce sera moins perturbateur s'il s'agit d'un environnement de transaction élevé, mais oui, c'est toujours assez compliqué.
JNK