Bonjour à tous,
J'utilise la version 16.5.0.3982 de Power AMC pour concevoir et faire évoluer un modèle de données destiné à SQL Server 2012. Je rencontre des problèmes avec la suppression PK dans les scripts générés par Power AMC.
Je m'explique en partant d'un exemple très simple et de son MCD
Soit une entité T1 et une entité T2 possédant une clé primaire PKT2. Je définis une association 0,1/0,n entre ces deux entités. Je génère mon modèle physique de données de sorte à obtenir deux tables ayant chacune leur PK avec en plus dans la table T1 une foreign key référençant la PK de T2.
Je génère le script et je le joue sur ma base.
Je reviens ensuite dans mon MCD et j'ajoute un champ dans l'entité T2 pour entraîner volontairement une modification de la table T2 dans le modèle physique. Dans ce contexte Power AMC renomme la table T2 en tmp_T2 pour pouvoir recréer une table T2 avec le nouveau champ et ensuite recopier le contenu backupé dans tmp_T2 vers T2, nouvelle version. Jusqu'ici je ne vous apprend rien, c'est le comportement de base.
Sauf qu'avant de renommer T2 en tmp_T2, Power AMC génère un script de suppression de la PK de T2 de ce style :
Et le problème c'est que cette PK est référencée par la FK de T1 et Power AMC ne me génère pas le bout script dropant cette clé étrangère en amont du drop de la PK de T2 ; bout de script qui devrait ressembler à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 alter table T2 drop constraint PK_T2 ;
Chose doublement étonnante : il me génère bien les lignes responsables de la recréation de cette contrainte en fin de script...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if exists (select 1 from sys.sysreferences r join sys.sysobjects o on (o.id = r.constid and o.type = 'F') where r.fkeyid = object_id('T1') and o.name = 'FK_T1_T1T2_T2') alter table T1 drop constraint FK_T1_T1T2_T2 ;
J'obtiens donc une erreur du style :
Jusqu'ici je rajoutais les instructions de suppression de FK à la main dans le script généré par Power AMC en itérant dans un contexte rollbacké jusqu'à ne plus avoir d'erreur mais plus mon modèle évolue, plus ça devient fastidieux à faireMsg 3725, Level 16, State 0, Line 9
The constraint 'PK_T2' is being referenced by table 'T1', foreign key constraint 'FK_T1_T1T2_T2'.
Msg 3727, Level 16, State 0, Line 9
Could not drop constraint. See previous errors.
J'ai essayé tout ce qui me passait par la tête (notamment dans les propriétés du modèle et du SGBD) pour essayer de lui faire générer ces lignes manquantes mais en vain. Donc si quelqu'un a déjà été confronté à ce problème/besoin je suis preneur de ses lumières
Précision : mes contraintes sont en "Declarative" et volontairement pas en "Trigger".
D'avance merci beaucoup à ceux qui prendront le temps de me lire et peut-être de me répondre
Partager