2010-09-10 26 views
0

Dans le cas où je dois modifier le PK d'une ligne de 1 à 10, par exemple, y a-t-il un moyen de tracer chaque proc, vue et fonction qui pourrait faire référence à l'ancienne valeur? Je veux dire, un simple sélection dans un proc comme: select * from table where FK = 1 casserait, et je devais chercher chaque référence pour ceux dans chaque proc et vue et les changer en 10 pour que le système fonctionne.Comment faire le suivi de la dépendance au niveau de la ligne?

Y a-t-il un moyen automatique de le faire? J'utilise SQL SERVER.

Répondre

0

Je suppose que la seule façon de le faire correctement consiste à interroger les métadonnées de la base de données - pour identifier tous les endroits qui utilisent votre PK comme FK, dans un proc, ou dans une vue. Ceci est susceptible d'être complexe; fragile; et sujettes à l'erreur. Ceci est l'une des (nombreuses) raisons pour éviter que le PK ne soit autre chose qu'une valeur dérivée du système, qui n'est pas accessible à la manipulation par (même) le créateur/administrateur. En outre, dans quelles circonstances auriez-vous un PK codé en dur dans un proc ou une fonction - encore une fois une source potentielle de fragilité dans votre système.

Si un PK est créé incorrect (quel que soit le critère) ou qu'il doit être modifié, créez un nouvel enregistrement et copiez-y les valeurs existantes. Bien que cela ne réponde pas à votre requête, vos routines pour supprimer ou modifier les valeurs dans la table doivent savoir comment et où elles sont utilisées; et donc une routine pour copier une ligne devrait être en mesure d'accéder à cette information.