|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() Alexandre ChemlaConsultant en Business Intelligence Inscription : février 2006 Messages : 1 773 ![]() |
* Bonjour, *
La demande est un peu bizarre mais imaginons une base alimentée par un CRM. Pour des besoins particuliers, je souhaite que, même si le CRM souhaite remplir une colonne, je force la valeur à NULL et cela sans avoir un retour d'erreur du moteur. A part utiliser un trigger after, il y a une autre solution ? J'essaye avec les contraintes, mais lorsque j'essaye d'insérer, il refuse complètement la ligne et me retourne une erreur, ce qui est normal. * Merci * |
|
|
00
|
|
|
#2 | |||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Citation:
Code sql :
|
|||
|
|
00
|
|
|
#3 |
![]() ![]() Alexandre ChemlaConsultant en Business Intelligence Inscription : février 2006 Messages : 1 773 ![]() |
C'est vrai, c'est peut-être mieux avec instead of.
Je n'ai pas précisé mais ça peut être en cas d'insert ou d'update. mais l'idée est tout de même de ne pas utiliser de trigger du tout si possible ? |
|
|
00
|
|
|
#4 |
![]() ![]() |
Quel serait le besoin "après" d'avoir cette colonne nulle ?
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#5 |
![]() ![]() Alexandre ChemlaConsultant en Business Intelligence Inscription : février 2006 Messages : 1 773 ![]() |
Le CRM met à jour cette colonne automatiquement, alors que dans le cas de ce paramétrage précis, pour ce client, je ne veut pas qu'il puisse modifier cette valeur.
Sans avoir la possibilité d'agir sur le CRM à ce niveau, je comptais le faire au niveau SQL, si possible sans trigger. |
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Un moyen d'éviter les mises à jour d'une colonne est de leurrer le CRM en lui faisant prendre une vessie pour une lanterne, c'est-à-dire de lui faire mettre à jour une vue plutôt qu'une table de base, vue dans laquelle ne figurent pas les noms des colonnes justement interdites de mise à jour.
Le sage Waldar a-t-il une opinion à ce sujet ? Peut-être que le bouillant SQLpro a rédigé des billets en ce sens ?
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
00
|
|
|
#7 | |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
N'étant ni sage ni bouillant j'émetterais quand même mon humble avis
Citation:
++ |
|
|
00
|
|
|
#8 | |||
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Citation:
Quant à votre sagesse, votre modestie dût-elle en souffrir, j'oserai malgré tout la qualifier de proverbiale... Vous connaissez ma position vis-à-vis de NULL, mais comme Jinroh77 n’a pas l’air contre son emploi, la séquence suivante devrait le satisfaire, dans le respect de la 6e des 12 règles de Codd : Code SQL :
Quoi qu'il en soit, même si Jinroh77 n’est pas amateur de triggers, pourquoi ne pas quand même essayer de tricoter vue et trigger pour trouver une solution qui ne fasse pas intervenir NULL dans la déclaration de la table T ?
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|||
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Avec un trigger associé à la vue V, pourquoi pas quelque chose comme ça :
Code SQL :
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
||
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
|
|
|
00
|
|
|
#11 |
![]() ![]() Alexandre ChemlaConsultant en Business Intelligence Inscription : février 2006 Messages : 1 773 ![]() |
Bonjour,
Merci à tous vos apports sur cette discussion. Je vais voir du côté de la vue si au moins on peut jouer sur le CRM à ce niveau mais je ne suis pas sûr. Pour répondre à cette dernière question, l'idée est d'un point de vue performance. J'avais peur qu'à partir d'un CRM générant beaucoup d'activité à ce niveau, le trigger pouvait plus consommer qu'une autre méthode. D'où le fait de penser à quelque chose de simple et efficace, mais visiblement ce n'est pas possible. |
|
|
00
|
|
|
#12 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
La solution de passer par une vue sans trigger est élégante je trouve (qui respecte bien la 6ème règle de Codd) mais pour cela il faudrait avoir comme hypothèse que Jinroh77 puisse avoir accès au code du CRM concerné.
++ |
|
00
|
|
|
#13 |
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 565 ![]() |
Ne serait-il pas possible de nommer la vue comme la table normalement manipulée et de renommer cette dernière afin de leurrer complètement l'application cliente sans avoir à y toucher ?
|
|
|
00
|
|
|
#14 |
![]() ![]() Alexandre ChemlaConsultant en Business Intelligence Inscription : février 2006 Messages : 1 773 ![]() |
Le problème est que si je fais cela, c'est tout le CRM qui risque de faire la tête.
La table est utilisée par d'autres traitements interne que je ne préfère pas déranger. Pour résumer : - soit un triger que l'on essaye de faire propre et rapide. - soit d'une manière ou d'une autre, il faut aller modifier le code du CRM pour le faire pointer autre part. Merci pour toutes vos idées |
|
|
00
|
|
|
#15 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 882 ![]() |
Je ne suis pas du tout spécialiste de SQL Server, mais ne pourrait-on pas envisager la piste de l'instruction GRANT pour autoriser/interdire à tel ou tel process la mise à jour de telle et telle colonnes de la table en question ?
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire ») => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale ») __________________ Bases de données relationnelles et normalisation : de la première à la sixième forme normale (Bonne lecture !) |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() |
Si le CRM met à jour cette colonne, ne l'utilises pas également? le fait que sa valeur soit NULL (oups je veux dire son absence de valeur il y à tout le beau monde là il faut faire attention :-)) ne va t'il pas le perturber?
Les TRIGGER font partie intégrantes des SGBDR, s'il est vrai qu'il faut prêter une attention toute particulière à leur optimisation, leur utilisation est courante et pas forcement contre performante... |
|
|
00
|
|
|
#17 | |
|
Membre Expert
![]() |
Citation:
|
|
|
|
00
|
|
|
#18 |
![]() ![]() Alexandre ChemlaConsultant en Business Intelligence Inscription : février 2006 Messages : 1 773 ![]() |
|
|
|
00
|
|
|
#19 |
|
Membre Expert
![]() |
Une vue avec un INSTEAD OF trigger me semble la solution dans ce cas...
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com