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 :

Besoin d'aide sur un trigger


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 114
    Points : 88
    Points
    88
    Par défaut Besoin d'aide sur un trigger
    Bonjour à tous,

    Voilà, j'essaie de mettre en place une solution via un trigger.
    Ce trigger devrait à l'update d'une table (dbo.FSCHADEGEGEVENS), récupérer le numéro du dossier et le code du pays (ex: BE). Puis récupérer tous les enregistrement dans une autre table qui ont le même code pays.
    Et tous les insérer dans une 3ème table.
    Voici mon code
    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
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    CREATE TRIGGER dbo.Afspraak_Landcode
    ON dbo.FSCHADEGEGEVENS
    AFTER UPDATE
    AS
    BEGIN
    DECLARE @dossiernr as int, @landcode as varchar(5), @d as varchar(5), @a as varchar(5), @v as varchar(50);
     
    SELECT @dossiernr=FDOSSIERNR, @landcode=LANDMELDING FROM inserted;
     
    DECLARE my_cursor CURSOR FOR
    SELECT Afspraak, Verslag FROM _F4_F10 WHERE landcode=@landcode
     
    OPEN my_cursor;
    	FETCH NEXT FROM my_cursor INTO @a,@v 
    	WHILE @@fetch_status = 0
    	BEGIN
    		INSERT INTO dbo.FAFSPRAAKGEGEVENS (FDOSSIERNR,AFSPRAAKCODE ,MEDNR_AANMAAK  ,AFSPRDATUM_TIJD ,AFSPROMS   ,AFSPRTGW ,AFGEMELD,URGENT ,VERSLAG  ,CREATION_DATE ,SHOW_IN_TICKER)
    		VALUES (@dossiernr ,@a ,1121 ,GETDATE()  ,@v  ,'SYS'   ,'N' ,'N'  ,'' ,GETDATE()  ,'N');
    	END
    close my_cursor;
    deallocate my_cursor;
    END
    Lorsque je test cela via l'application client (C#, et j'ai pas la main dessus), le soft plante avec comme erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Message : Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
    Donc je ne sais pas si c'est mon code qui fait buguer ou ce qu'il se passe derrière l'application fait en sorte que mon code ne peut fonctionner.

    Merci d'avance pour vos idées et remarques

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Vous faites le pire du pire :
    1) déclencheur non ensembliste
    2) curseur dans un déclencheur
    3) mise à jour dans le boucle du curseur.

    Commencez à apprendre à faire des requêtes UPDATE à l'aide de sous requêtes.

    Pour plus d'aide, merci de poster le DDL de vos trois tables (nous ne sommes pas devins).

    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/ * * * * *

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 114
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Vous faites le pire du pire :
    1) déclencheur non ensembliste
    2) curseur dans un déclencheur
    3) mise à jour dans le boucle du curseur.

    Commencez à apprendre à faire des requêtes UPDATE à l'aide de sous requêtes.

    Pour plus d'aide, merci de poster le DDL de vos trois tables (nous ne sommes pas devins).

    A +
    Merci pour ces précisions

    C'est vrai que pour la sous requêtes, je n'y avait pas pensé... mais je pense que tu as compris que c'est mon 1er trigger.
    Qu'entends tu par le curseur est dans le déclencheur ?

    Je pose le DDL de suite

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 114
    Points : 88
    Points
    88
    Par défaut
    J'ai adapté mon trigger et maintenant il fonctionne.
    Si ça peut aider quelqu'un voici le code
    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 dbo.Afspraak_Landcode
    ON dbo.FSCHADEGEGEVENS
    AFTER UPDATE
    AS
    BEGIN
    IF NOT UPDATE(AFSLUITDATUM_DOSSIER)
    	BEGIN
    	DECLARE @dossiernr as int, @landcode as varchar(5), @afspraak as varchar(5), @verslag as varchar(255);
     
    	SELECT @dossiernr=i.FDOSSIERNR, @landcode=i.LANDMELDING, @afspraak=f.Afspraak, @verslag= f.Verslag FROM inserted i LEFT JOIN _F4_F10 f ON i.LANDMELDING=f.Landcode;
    	IF @@ROWCOUNT > 0
    	INSERT INTO dbo.FAFSPRAAKGEGEVENS (FDOSSIERNR,AFSPRAAKCODE ,MEDNR_AANMAAK  ,AFSPRDATUM_TIJD ,AFSPROMS,AFSPRTGW ,AFGEMELD,URGENT ,VERSLAG,CREATION_DATE ,SHOW_IN_TICKER)
    	SELECT @dossiernr ,Afspraak ,1121 ,CONVERT(char(10), GetDate(),126)  ,Verslag  ,'SYS'   ,'N' ,'N'  ,'' ,GETDATE()  ,'N' FROM _F4_F10 WHERE Landcode=@landcode
    	END
    END
    Attention, ce n'est peut être (pour le pas dire surement) une bonne solution...

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    N opn, votre trigger n'est toujours pas ensembliste... Voici quelque chose pour vous aider :
    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
    17
     
    CREATE TRIGGER dbo.Afspraak_Landcode
    ON dbo.FSCHADEGEGEVENS
    AFTER UPDATE
    AS
    BEGIN
    IF UPDATE(AFSLUITDATUM_DOSSIER)
    RETURN
     
    	INSERT INTO dbo.FAFSPRAAKGEGEVENS 
    	       (FDOSSIERNR,  AFSPRAAKCODE ,MEDNR_AANMAAK, AFSPRDATUM_TIJD , AFSPROMS,       AFSPRTGW, AFGEMELD,URGENT ,VERSLAG,CREATION_DATE ,SHOW_IN_TICKER)
    	SELECT i.FDOSSIERNR ,Afspraak ,    1121 ,         CONVERT(char(10), GetDate(),126), Verslag  ,'SYS'   ,'N' ,   'N'    , GETDATE()    ,'N' 
    	FROM   _F4_F10 AS T 
    	       INNER JOIN inserted AS i 
    	             ON  T.Landcode=i.LANDMELDING
    		   LEFT OUTER JOIN _F4_F10 f 
    		         ON i.LANDMELDING=f.Landcode;
    Dans un trigger il ne doit généralement JAMAIS y avoir de variables !

    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/ * * * * *

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

Discussions similaires

  1. [2012] Besoin d'aide sur les triggers
    Par layesanga dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/03/2013, 19h53
  2. Besoin d'aide sur une requete ds un trigger
    Par ideal dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/02/2006, 10h05
  3. besoin d'aide sur trigger
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 18/07/2004, 22h28
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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