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 :

[2005] appel d'une procédure dans un trigger


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Points : 9
    Points
    9
    Par défaut [2005] appel d'une procédure dans un trigger
    Bonjour,

    Voici mon probleme:

    A la base je veux pouvoir lancer le rafraichissement d'un snapshot d'une database à travers un trigger.
    Malheureusement on ne peux pas rafraichir un snapshot dans SQL server 2005 !!!???

    Donc pas d'autre moyen que de le dropper et le recréer.

    Sauf qu'on ne peut pas faire de drop database dans un trigger

    donc j'ai crée une procedure stockée qui faire le drop database et je lance cette procédure dans le trigger. Mais là encore j'ai un message d'erreur lorsque le trigger se declenche :

    Msg 574, Level 16, State 0, Line 1
    DROP DATABASE statement cannot be used inside a user transaction.

    J'ai cherché un peu ( par exemple j'ai essayé de mettre use master; avant le drop) mais j'ai toujours le même message.

    Quelqu'un aurait une idée pour resoudre le probleme ?

    D'avance merci

  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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    En effet tout le code qui est contenu dans le code du trigger fera partie de la transaction qui a déclenché le trigger.
    En conséquence, le code du trigger est exécuté de façon synchrone à la transaction qui a déclenché le trigger, et c'est tout à fait normal

    C'est pourquoi vous obtenez :

    DROP DATABASE statement cannot be used inside a user transaction.
    Ce que vous pouvez faire, c'est créer un job de l'Agent SQL Server en ne lui attachant aucune planification, et dans lequel vous faites appel à la procédure stockée qui recrée une capture instantanée de la base de données.

    Dans votre trigger, vous devrez alors faire appel à la procédure stockée système sp_start_job en passant seulement le paramètre du nom du job que vous venez de créer.

    Cela vous permettra de désynchroniser le traitement de la capture instantanée de la base de données.

    @++

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    merci pour cette reponse mais j'ai encore un p'tit soucis:

    La procédure stockée sp_start_job n'existe que dans le schéma msdb donc je ne peux pas l'appeler dans celui où se trouve le trigger.

    Une solution ?

    Merci

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Autant pour moi il suffisait juste de mettre msdb.dbo.sp_start_job

    Merci

  5. #5
    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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Effectivment, MSDB est une base de données, pas un schéma

    @++

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

Discussions similaires

  1. Appel d'une procédure dans une app. console
    Par FDR2006 dans le forum Débuter
    Réponses: 2
    Dernier message: 10/05/2011, 15h15
  2. appel d'une procédure dans une procédure
    Par breizh76 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 23/03/2010, 15h47
  3. Appel d'une procédure dans une autre procédure
    Par logo98 dans le forum Langage
    Réponses: 7
    Dernier message: 20/05/2009, 13h50
  4. Appel d'une procédure dans une jsp
    Par yasinfo dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/12/2008, 17h32
  5. Appel d'une procédure dans une boucle
    Par Microturnip dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/06/2008, 03h46

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