IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

INSTEAD OF + INSERT = Boucle infinie ?


Sujet :

MS SQL Server

  1. #1
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut INSTEAD OF + INSERT = Boucle infinie ?
    Bonjour,

    j'ai des questions sur "instead of". En effet, quand un utilisateur entre des connée avec un insert, je voudrai que mon trigger modifie ces données. Le cas typique est le mot de passe que je veux que mon trigger crypte (mais le trigger fait d'autres choses avec le mot de passe, donc je ne peux pas le crypter auparavant). Donc je me suis dit "au lieu d'entrer les données, mon trigger va les traiter puis les rentrer".

    Et là... j'ai réfléchi, et je me suis dit : mais je risque d'entrer dans une boucle infinie, non ? En effet, si au lieu d'entrer des données, j'entre des données, sur les données entrées, je vais faire "au lieu d'entrer, etc...".

    Alors mes questions sont les suivantes :
    -Le problème existe-t-il ? Bah oui, je n'ai pas testé (je ne cryptais pas les données jusqu'à maintenant, donc je n'avais pas rencontré le problème). J'imagine que les créateurs de base de données ont pu se rendre compte de se problème et dire que le trigger n'est pas appellé par lui même dans une insertion. Mais ils ont tres bien pu dire l'inverse : Comment ça marche ?

    -Si le problème existe vraiment, existe-t-il une solution paliative ? Une méthode qui fait que ça peut fonctionner comme j'ai envie ?

    Précision, mais je ne sais pas si elle est utile : c'est sous MSDE.

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Pas d'inquiétude de ce côté : le principe du trigger INSTEAD OF est que tu dois de toute manière à l'intérieur générer l'INSERT dans la table du trigger, ou sous-jacente si tu l'as placé sur une vue. Il n'y a pas d'appel récursif, SQL 2000 est conçu pour l'éviter.

    Même si tu crées un trigger AFTER qui lui aussi insère dans la même table, cet insert n'appellera pas le trigger INSTEAD OF à nouveau.
    Normalement, le trigger AFTER non plus n'est pas récursif, sauf si une option de la base est explicitement à ON :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ALTER DATABASE mabase
    SET RECURSIVE_TRIGGERS ON
    Dans ce cas, les triggers AFTER peuvent se déclencher récursivement jusqu'à la valeur limite de 'nested triggers' (voir sp_configure dans l'aide en ligne)

    'Nested triggers' adresse le problème de la récursion indirecte, cad quand un trigger d'une table A appelle le trigger d'une table B, qui appelle le trigger de la table A... Sauf erreur, cette récursion indirecte de pose pas non plus de problème dans SQL 2000 pour un trigger INSTEAD OF, et selon l'aide en ligne, cela a changé dans SQL Server 2005
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    Ouf ! Merci pour ces précisions :o)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Boucle Infinie] pour un menu
    Par NhyMbuS dans le forum C++
    Réponses: 5
    Dernier message: 20/07/2005, 09h14
  2. symptome de la boucle infinie dans une requete
    Par ouam81 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/05/2005, 12h10
  3. Réponses: 15
    Dernier message: 24/05/2005, 08h34
  4. [Socket] Pb de boucle infinie
    Par Myogtha dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 10/06/2004, 14h10
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo