Bonjour,
Je souhaiterai savoir si il est possible de connaitre l'impact de l'exécution d'une requete (par exemple un delete) avant son execution, afin d'avertir l'utilisateur
Par avance merci ....
Bonjour,
Je souhaiterai savoir si il est possible de connaitre l'impact de l'exécution d'une requete (par exemple un delete) avant son execution, afin d'avertir l'utilisateur
Par avance merci ....
Bonjour,
Cette question n'a pas vraiment de sens
Les lignes impactées par un ordre SQL ne sont pas la propriété d'un utilisateur, le login parfois enregistré comme mouchard dans une ligne de base de données est informatif, ce n'est pas un titre de propriété
L'impact d'un DELETE concerne plusieurs domaines fonctionnels
Par exemple, supprimer un client concerne à minima le domaine commercial et le domaine comptable, mais sans doute aussi le domaine statistiques, la relation client, la GED etc...
Et dans chaque service, il y a plusieurs utilisateurs concernés.
Sans compter que l'utilisateur qui a créé le client, a peut être changé de domaine ou quité l'entreprise pour être remplacé par une autre personne
Donc analyser le mouchard de login de la personne qui a créé ou fait la dernière mise à jour ne permet pas d'alerter les personnes concernées avant une suppression
Si c'est l'impact physique en terme de ressource, coût d’exécution... oui, il suffit de demander le plan de requête.
Si c'est l'impact logique en terme de conséquence dans la base... oui il suffit de démarrer une transaction explicite de ne pas la finaliser (ni COMMIT, ni ROLLBACK) et de passer diverses requêtes SELECT d'investigation pour se rendre compte des effets.
Si c'est l'impact logique en terme de conséquence, certains SGBDR comme SQL Server, permettent de savoir en retour quelles sont les lignes impactées et leurs valeurs avant et après l'exécution de la requête.
Dans SQL Server, c'est la clause OUTPUT qui permet de savoir cela en renvoyant un DATASET avec les valeurs des colonnes que vous souhaitez connaître avant et après
A +
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
* * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *
Merci pour vos réponses
Un exemple :
Delete from table where idParent =12
A l’exécution de cette requête, 128 lignes seront supprimées (c'est un exemple)
Comment connaitre ce nombre avant de lancer l’exécution
J'ai pensé a remplacé par un select, mais je me demande s'il n'y a pas mieux ...
Tout ça avec GD2
Effectivement, vous pouvez remplacer le delete par un select count(*)
Mais si dans l'intervalle des insertions ou des suppressions sont faites par un autre thread, le résultat ne sera qu'indicatif, sauf à poser un verrou exclusif dans votre transaction
Partager