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

Développement SQL Server Discussion :

Création d'un trigger INSTEAD OF INSERT


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 109
    Points : 83
    Points
    83
    Par défaut Création d'un trigger INSTEAD OF INSERT
    Bonjour à tous,

    j'ai une table dossier qui a une foreign key sur une table etat dossier (en cours [1] ou clos[2]).
    Je ne veux pas rendre possible l'insertion d'un dossier avec un etat_dossier "en cours" si il en existe deja un pour une ressource (comprendre employé).

    Je récupère bien le nombre de dossier en cours par ma requete select dans mon if.

    En revanche c'est après que je bloque.
    Je souhaiterai si le if est ok (cad qu'il n'y a pas de dossier en cours) INSERER les données (comportement classique donc)
    sinon ne rien faire et donc empecher l'insert classique de s'effectuer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TRIGGER RESTRICTION_DOSSIERS_EN_COURS
    ON DOSSIER
    INSTEAD OF INSERT
    AS
    BEGIN
    	IF (SELECT COUNT(*) AS nb from dossier d,inserted where d.id_ressource = inserted.id_ressource and inserted.id_etat_dossier = 1) = 0
                -- INSERER LES DONNEES CAR NBDOSSIERENCOURS = 0
           ELSE -- NE RIEN FAIRE
    END
    Merci pour l'aide que vous pourrez m'apporter.
    Bonne journée à tous.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Salut,

    Et ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BEGIN
    	DECLARE @nb as int
    	SELECT @nb=COUNT(*) FROM dossier d,inserted WHERE d.id_ressource = inserted.id_ressource AND inserted.id_etat_dossier = 1
    	IF (@nb=0)
                -- INSERER LES DONNEES CAR NBDOSSIERENCOURS = 0
           ELSE -- NE RIEN FAIRE
    END

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 109
    Points : 83
    Points
    83
    Par défaut
    Le problème ne vient pas de mon IF mais de ce qu'il y a après.
    Il est vrai que faire une variable NB et tester sa valeur après semble plus propre mais ce n'est pas le coeur du problème.

    Je voudrais avoir la syntaxe pour remplacer mes commentaires.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Points : 240
    Points
    240
    Par défaut
    Ah ok!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
           IF (@nb=0)
                  BEGIN
                       -- INSERER LES DONNEES CAR NBDOSSIERENCOURS = 0
                         INSERT INTO TaTable (champA, champB) SELECT champA, champB FROM INSERTED
                 END
           ELSE
                  BEGIN
                          -- NE RIEN FAIRE
                  END

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 109
    Points : 83
    Points
    83
    Par défaut
    Cela fonctionne parfaitement.

    Merci beaucoup.

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

Discussions similaires

  1. comment fonctionne trigger instead of insert ?
    Par 007007 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 20/12/2009, 20h10
  2. trigger instead of insert
    Par smash dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 26/08/2009, 20h07
  3. SqlBulkCopy & Trigger instead of INSERT
    Par Nono3013 dans le forum Développement
    Réponses: 4
    Dernier message: 07/11/2008, 21h00
  4. Réponses: 32
    Dernier message: 21/08/2008, 12h27
  5. [SQL2K] TRIGGER - Instead of Insert
    Par buchette dans le forum Développement
    Réponses: 3
    Dernier message: 04/06/2008, 17h33

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