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 :

use Master et procédure stockée


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut use Master et procédure stockée
    Bonjour à tous.

    J'aimerai savoir comment proceder pour fermer toutes les connections à une base.

    J'ai trouvé que la procédure KILL devrait resoudre le problème voici comment je procède
    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
    CREATE PROC Tuer_Processus
    AS
    use Master
    Declare @T nvarchar(10) 
    declare Decon CURSOR FOR
    	select convert(varchar(4), spid) 
    	from master..sysprocesses 
    	where dbid = db_id('Mabase') 
    Declare @spid as varchar(4);
    OPEN Decon
    FETCH NEXT FROM Decon
    	into  @spid;
    WHILE (@@FETCH_STATUS = 0)
    begin
    set @T = 'KILL '+ @spid
    exec sp_executesql @T
    FETCH NEXT FROM Decon
      into  @spid;
    end
    CLOSE Decon
    DEALLOCATE Decon;
     
    GO
    il me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Impossible d'utiliser Use Master dans une procédure stockée ou un déclencheur.
    Comment puis je contourner le problème sachant que je veux me deconnecter de la base sur laquelle je bosse.

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 227
    Billets dans le blog
    25
    Par défaut
    Comme ça

    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
    CREATE PROC Tuer_Processus
    AS
    BEGIN
    Declare @T nvarchar(10)
    declare Decon CURSOR FOR
       select convert(varchar(4), spid)
       from master..sysprocesses
       where dbid = db_id('Mabase')
    Declare @spid as varchar(4);
    OPEN Decon
    FETCH NEXT FROM Decon
       into  @spid;
    WHILE (@@FETCH_STATUS = 0)
    begin
    set @T = 'KILL '+ @spid
    exec sp_executesql @T
    FETCH NEXT FROM Decon
      into  @spid;
    end
    CLOSE Decon
    DEALLOCATE Decon;
    END
    GO
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Voilà ce qu'il me sort comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Impossible d'utiliser KILL pour tuer votre propre processus.

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 227
    Billets dans le blog
    25
    Par défaut
    Alors
    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
    25
    26
     
    CREATE PROC Tuer_Processus
    AS
    BEGIN
    Declare @T nvarchar(10)
    declare Decon CURSOR FOR
       select convert(varchar(4), spid)
       from master..sysprocesses
       where dbid = db_id('Mabase')
       and spid <> @@spid
     
    Declare @spid as varchar(4);
    OPEN Decon
    FETCH NEXT FROM Decon
       into  @spid;
    WHILE (@@FETCH_STATUS = 0)
    begin
    set @T = 'KILL '+ @spid
    exec sp_executesql @T
    FETCH NEXT FROM Decon
      into  @spid;
    end
    CLOSE Decon
    DEALLOCATE Decon;
    END
    GO
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  5. #5
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Le problème réside justement dans le fait que je veux tuer toutes les processus à ma base faute de koi je ne pourrais faire une restauration. Puisque dans ce cas il me dit que la base est en cours d'utilisation.

  6. #6
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 227
    Billets dans le blog
    25
    Par défaut
    Eh bien commencez par quitter votre base avant de lancer votre proc.

    Kill empêche de se suicider, d'où le test de @@spid.
    Une procédure stockée ne peut faire appel à USE
    A la limite, gérez un message d'erreur

    CREATE PROC Tuer_Processus
    AS
    BEGIN
    Declare @T nvarchar(10)
    declare Decon CURSOR FOR
    select convert(varchar(4), spid)
    from master..sysprocesses
    where dbid = db_id('Mabase')
    and spid <> @@spid

    /* Debut du test*/
    declare @d1 int, @d2 int

    select @d1=dbid, @d2=db_id() from master..sysprocesses where spid=@@spid

    if @d1 = @d2
    begin
    raiserror 200001 'Quittez cette base'
    print 'Quittez cette base'
    end

    /* Fin du test*/

    Declare @spid as varchar(4);
    OPEN Decon
    FETCH NEXT FROM Decon
    into @spid;
    WHILE (@@FETCH_STATUS = 0)
    begin
    set @T = 'KILL '+ @spid
    exec sp_executesql @T
    FETCH NEXT FROM Decon
    into @spid;
    end
    CLOSE Decon
    DEALLOCATE Decon;
    END
    GO
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  7. #7
    Membre expérimenté
    Inscrit en
    Mars 2004
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 425
    Par défaut
    Citation Envoyé par fadace
    Eh bien commencez par quitter votre base avant de lancer votre proc.

    Kill empêche de se suicider, d'où le test de @@spid.
    Une procédure stockée ne peut faire appel à USE
    A la limite, gérez un message d'erreur


    /* Debut du test*/
    declare @d1 int, @d2 int

    select @d1=dbid, @d2=db_id() from master..sysprocesses where spid=@@spid

    if @d1 = @d2
    begin
    raiserror 200001 'Quittez cette base'
    print 'Quittez cette base'
    end

    /* Fin du test*/

    GO
    Quelle est l'instruction qui va quitter la base?

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Procédure stocké:Insert et renvoie de la clé primair
    Par caramel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2003, 09h34
  3. [Pervasive SQL ] procédure stockée
    Par magellan dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 25/10/2002, 13h17
  4. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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