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 :

SOS Procedure stockée


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 141
    Par défaut SOS Procedure stockée
    salut la communauté !
    j'ai une BD qui compte plus de 50 tables que je dois pouvoir vider pour soulager la BD.
    j'ai écrit ce 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 PROCEDURE VIDE_TABLE  AS
     
    DECLARE @LaTable Varchar(50)
     
    DECLARE MyCursor1 CURSOR 
     
    FOR 
     
       SELECT table_name FROM information_schema.tables WHERE table_name  NOT LIKE 't%' and table_name not like 'd%' and table_type = 'BASE TABLE'
     
    OPEN MyCursor1
     
    FETCH MyCursor1 INTO @LaTable
    -- boucle de traitement
     
    WHILE @@fetch_Status = 0
     BEGIN
       DELETE  FROM   @LaTable
     
        FETCH MyCursor1 INTO @LaTable
     END
    CLOSE myCursor1
    DEALLOCATE myCursor1
    GO
    Mon PB est que à l'exécution il me dit
    variable @LaTable Non déclarée.
    Pourtant la compilation marche bien.
    Aidez moi SVP

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut
    Tu ne peux pas écrire la requête suivante :

    Pour réaliser cette commande, tu dois passer par du SQL Dynamique.

    Bon courage.

  3. #3
    Membre actif
    Inscrit en
    Janvier 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 70
    Par défaut
    oui du sql dynamique du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE @sql varchar(max);
     
    SET @sql = 'DELETE ' + @laTable;
     
    EXEC (@sql)

  4. #4
    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 : 43
    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
    Bonsoir,

    Il y aura certainement un ordre de suppression des lignes dans vos tables, car vous devez avoir des contraintes de clé étrangères.
    Ce que vous pouvez faire, c'est scripter toutes vos contraintes, purger les tables avec la commande TRUNCATE, puis remettre toutes vos contraintes.
    Mais même dans ce cas, il y aura un ordre ...

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Par défaut
    1-Il vaut mieux éviter le sql dynamique
    2-Désactiver d'abord les contraintes reférentielles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 'ALTER TABLE ' + CONSTRAINT_SCHEMA + '.' + TABLE_NAME + ' NOCHECK CONSTRAINT ' + 
    		 + CONSTRAINT_NAME 
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE CONSTRAINT_TYPE='FOREIGN KEY'
    3-Générer un script de suppression proprement dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT 'Delete from ' + table_name
    FROM information_schema.TABLES 
    WHERE table_name  NOT LIKE 't%' 
    AND table_name NOT LIKE 'd%' 
    AND table_type = 'BASE TABLE'
    Bonne chance

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 141
    Par défaut
    Merci à tous d'etre venus à mon chevet !
    j'ai effectivement compilé tout ce que vous avez dis et je dois dire que mes tables ne sont pas en relation. ce sont justes des simples tables pour faire des insertions et rien d'autres : il n'y a aucune relation entre les objets de ma BD
    j'ai essayé d'implémenter ce 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
     
    CREATE PROCEDURE VIDE_PAR_BSC    @LaBSC varchar(7),@LaDate varchar(12)  AS
     
    DECLARE @LaTable  varchar(50)
    DECLARE @REQ varchar(150)
    DECLARE LeCurseur CURSOR
    FOR
    SELECT table_name FROM information_schema.TABLES  WHERE table_name NOT LIKE 't%' and table_name not like 'd%' AND table_type = 'BASE TABLE'
    OPEN LeCurseur
    FETCH LeCurseur into @LaTable
    WHILE @@FETCH_STATUS = 0
    BEGIN
    SET @REQ = 'DELETE FROM '+@LaTable+' WHERE LADATE =  '+ @LaDate+ ' AND SBS_name = '+@LaBSC
    EXEC (@REQ)
    END
    CLOSE LeCurseur
    DEALLOCATE LeCurseur
    GO
    Mais il s'exécute indéfiniment et lorsque j'essaie d'arreter l'exécution il me dit :
    Serveur: Msg 207, Niveau 16, tat 3, Ligne 1
    'sbs_1' : nom de colonne incorrect.
    je ne vois vraiment pas ce qui cloche !

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

Discussions similaires

  1. Ecriture d'une procedure stockée XP
    Par WOLO Laurent dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/07/2003, 13h09
  2. Réponses: 1
    Dernier message: 04/06/2003, 11h48
  3. procedure stockée champ date
    Par tripper.dim dans le forum SQL
    Réponses: 5
    Dernier message: 25/04/2003, 09h47
  4. Appel a une procedure stockée en vba
    Par The_Nail dans le forum VBA Access
    Réponses: 36
    Dernier message: 01/04/2003, 16h44
  5. procedure stockée dans un dbbatch
    Par pram dans le forum XMLRAD
    Réponses: 4
    Dernier message: 07/02/2003, 16h35

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