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 :

[sql2005] création de trigger débutant


Sujet :

Développement SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 98
    Par défaut [sql2005] création de trigger débutant
    Bonjour,
    J'aimerais créer un trigger, qui lorsque j'insère une donnée, celle-ci soit parsée et modifiée.

    En gros j'aimerais insérer la valeur "C2001BE0106-16" (qui provient d'une autre table offre pour l'insérer dans une nouvelle table projet) il faudrait qu'automatiquement lors de l'insértion cette valeur devienne "C2001BE0106-00" Et que si par hasard la valeur "C2001BE0106-00" existe déjà, il faudrait que ca prenne le chiffre suivant, comme "C2001BE0106-01", etc..

    Malheureusement je n'ai jamais pratiqué le t-sql et donc je ne sais même pas si ce que je demande est possible. Déjà rien que ca et une piste ca m'aiderait bcp. Merci. J'ai un peu cherché des fonctions sur les strings, mais tout ce que je trouve me demande chaque fois la position d'un caractère.. alors que justement je voudrai chercher le caractère "-" pour faire des opérations sur ce qui en suit.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TRIGGER afm.dba_project_insert ON afm.dba_project
    FOR INSERT AS
    BEGIN
    	IF UPDATE(proj_name)
    	BEGIN
    ??????
    	END
     
     
     
    END

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Cela devrait ressembler à quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE TRIGGER afm.dba_project_insert
    	ON afm.dba_project
    FOR INSERT AS
    BEGIN
    	IF UPDATE(proj_name)
    	BEGIN	
    			SELECT		LEFT(I.proj_name, CHARINDEX('-', I.proj_name)) + '01'
    			FROM		afm.dba_project AS P
    			INNER JOIN	inserted AS I ON P.proj_name = LEFT(I.proj_name, CHARINDEX('-', I.proj_name)) + '00'
    		UNION
    			SELECT		LEFT(I.proj_name, CHARINDEX('-', I.proj_name)) + '00'
    			FROM		inserted AS I
    			LEFT JOIN	afm.dba_project AS P ON P.proj_name = LEFT(I.proj_name, CHARINDEX('-', I.proj_name)) + '00'
    			WHERE		P.proj_name IS NULL
    	END 
    END
    Le premier SELECT ne retourne que pour les codes 00 qui existent les mêmes codes à ceci près qu'ils se terminent par 01.
    Le second SELECT retourne les codes se terminant par 00 et qui n'existent pas dans la table.

    A vous de tester puisque vous n'avez pas donné la structure de la table

    @++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 98
    Par défaut
    Merci pour votre réponse, même si je ne comprends pas tout
    je suppose que le "inserted" correspond à la table source.
    Mais je me suis mal exprimé,
    Enfait la donnée insérée, je vais la chercher dans une autre table, mais depuis mon interface, c'est un bête champ libre (une interface web qui fait un '
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO dba_project (proj_name) VALUES ('test-00')
    ').
    En gros je peux insérer n'importe quoi

    Si je veux insérer "blabla" ou même "blabla-12", j'aimerais que le trigger fasse que j'insère "blabla-00" et que si "blabla-00" existe, alors il essaie avec "blabla-01" et s'il existe, alors avec "blabla-02" jusqu'à que ca marche.
    ET c'est pour ca que je n'ai pas donnée la structure de la table, car ca concerne que cet enregistrement là, le reste sera inséré tel quel (à moins qu'il y ait une feinte que je doive dire au trigger d'insérer tous les éléments de la requête sql originale ?).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 98
    Par défaut
    Est-ce que qqun aurait une petite idée ?

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    je suppose que le "inserted" correspond à la table source.
    Pas du tout ...
    La table inserted est une copie des enregistrements à insérer dans la table de destination (dba_project) avant que le trigger ne soit exécuté.
    C'est une sorte de table temporaire créée automatiquement par SQL Server et qui sert de tampon.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

Discussions similaires

  1. [MySQL] Création de trigger depuis PHP
    Par Shiva dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/01/2007, 13h16
  2. [Débutant] Création de trigger
    Par steph_batman dans le forum Développement
    Réponses: 4
    Dernier message: 06/12/2006, 16h44
  3. [PL/SQL] [9i] Pblm lors de la création de triggers
    Par ftrifiro dans le forum Oracle
    Réponses: 3
    Dernier message: 27/06/2006, 15h08
  4. [Triggers] Débutant de chez Débutant
    Par stailer dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/05/2005, 17h52
  5. [IB][IBQUERY][D7 pro] Création de Triggers à la volée.
    Par N1bus dans le forum Bases de données
    Réponses: 6
    Dernier message: 13/10/2004, 14h23

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