Nous effectuons une migration de base de données vers SQL Server et, pour prendre en charge une application héritée, nous avons défini des vues sur la table SQL Server contenant les données attendues. Cependant, nous avons maintenant des problèmes avec les déclencheurs INSTEAD OF INSERT définis sur ces vues, lorsque les champs peuvent avoir des valeurs par défaut.Utilisation des valeurs par défaut dans un déclencheur INSTEAD OF INSERT
Je vais essayer de donner un exemple.
Une table de la base de données comporte 3 champs, a, b et c. c est flambant neuf, l'application legacy ne le sait pas, donc nous avons aussi une vue avec 2 champs, a et b.
Lorsque l'application héritée tente d'insérer une valeur dans son point de vue, nous utilisons un déclencheur INSTEAD OF INSERT pour rechercher la valeur qui devrait aller dans le champ c, quelque chose comme ceci:
INSERT INTO realTable(a, b, c) SELECT Inserted.a, Inserted.b, Calculated.C FROM...
(Les détails de la recherche n'est pas pertinente.)
Ce déclencheur fonctionne bien, sauf si le champ b a une valeur par défaut. En effet, si la requête
INSERT INTO legacyView(a) VALUES (123)
est exécuté, puis dans la gâchette, Inserted.b est NULL, et non b de la valeur par défaut. Maintenant, j'ai un problème, parce que je ne peux pas dire la différence de la requête ci-dessus, ce qui mettrait la valeur par défaut en b, et ceci:
INSERT INTO legacyView(a,b) VALUES (123, NULL)
Même si b était non nulle, je ne sais pas comment écrire la requête INSERT dans le trigger de telle sorte que si une valeur a été fournie pour b, elle est utilisée dans le trigger, mais sinon la valeur par défaut est utilisée à la place.
EDIT: ajouté que je préfère ne pas dupliquer les valeurs par défaut dans le déclencheur. Les valeurs par défaut sont déjà dans le schéma de base de données, j'espère que je pourrais juste les utiliser directement.
Sachant que tous vos champs avec des valeurs par défaut ne sont pas NULL est énorme! J'aurais pu avoir une solution pour vous si j'avais su cette information. – ErikE
Désolé Emtucifor, je ne savais pas à l'époque que j'ai posté la question que nous n'avions pas de valeurs par défaut sur les champs Nullable. Quelle aurait été votre solution? Si c'est bon, je peux encore l'augmenter et peut-être changer la réponse acceptée! –