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 :

[sql server 2000] procedure stockée


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 141
    Points : 80
    Points
    80
    Par défaut [sql server 2000] procedure stockée
    bonjour à tous !
    j'ai implémenté une sp pour supprimer des lignes dans mes tables en fonction de la date.
    mais je n'arrive pas à l'executer car je reçois un message disant
    Erreur 137 : la variable '@nomtable' doit etre déclarée
    aidez moi SVP
    voici le code de ma sp
    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
     
    CREATE PROCEDURE SUPPRESSION @VarDate DATETIME
    AS
     
    DECLARE  supp 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 supp
    DECLARE @nomtable VARCHAR(10)
     
    	FETCH supp INTO @nomtable
    		WHILE @@FETCH_STATUS = 0
    			BEGIN
    				DELETE FROM @nomtable WHERE DATE = @VarDate
    				PRINT @nomtable
    				FETCH supp INTO @nomtable
    			END
    CLOSE supp
    DEALLOCATE supp

  2. #2
    Invité
    Invité(e)
    Par défaut
    La syntaxe de FETCH n'est pas bonne.
    Essayez ceci:
    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
    CREATE PROCEDURE SUPPRESSION @VarDate DATETIME
    AS
    DECLARE @nomtable VARCHAR(10)
    DECLARE  supp 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 supp
     
    	FETCH NEXT FROM supp INTO @nomtable
    		WHILE @@FETCH_STATUS = 0
    			BEGIN
    	                       DECLARE @sql nvarchar(255)
    	                       SET @sql = N'DELETE FROM ' + @nomtable + N' WHERE DATE = ' + @VarDate
    	                       EXEC sp_executesql @sql
    				PRINT @nomtable
    				FETCH NEXT FROM supp INTO @nomtable
    			END
    CLOSE supp
    DEALLOCATE supp

  3. #3
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 141
    Points : 80
    Points
    80
    Par défaut
    merci beaucoup
    c bon et la compilation passe tres bien
    mais ça ne supprime pas car je dois convertir la valeur de paramètre en Date
    ce qui fait que j'ai dû modifier le code comme ceci
    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
    CREATE PROCEDURE SUPPRESSION @VarDate varchar(15)
    AS
    DECLARE @nomtable VARCHAR(25)
    DECLARE  supp 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 supp
     
    	FETCH NEXT FROM supp INTO @nomtable
    		WHILE @@FETCH_STATUS = 0
    			BEGIN
    	                       DECLARE @sql nvarchar(255)
    	                       SET @sql = N'DELETE FROM ' + @nomtable + N'  WHERE DATE =  ' +  CAST(@VarDate AS DATETIME)
    	                       EXEC sp_executesql @sql
    				PRINT @nomtable
    				PRINT @sql
    				FETCH NEXT FROM supp INTO @nomtable
    			END
    CLOSE supp
    DEALLOCATE supp
    GO
    et quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec suppression '17/02/07'
    je reçois ce message d'erreur
    Serveur : Msg 241, Niveau 16, État 1, Procédure SUPPRESSION, Ligne 14
    Erreur de syntaxe lors de la conversion d'une valeur datetime à partir d'une chaîne de caractères.
    est ce que tu y vois quelque chose ?
    merci encore

  4. #4
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 141
    Points : 80
    Points
    80
    Par défaut
    comment constituer cette chaine dans ma pocedure stockée ?
    DELETE FROM <NomTable> WHERE LADATE = '16/02/2007'

  5. #5
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    en faisant ca, ca doit fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'DELETE FROM ' + <NomTable> + ' WHERE LADATE = CONVERT(DATETIME,' + @vardate + ',103)'
    j'suis vert !

  6. #6
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 141
    Points : 80
    Points
    80
    Par défaut
    voici un exemple de ligne générée
    DELETE FROM CREATE_LPDLS WHERE LADATE = convert(datetime,16/02/2007,103)
    et avec ça aucune ligne n'est supprimée
    or moi je voudrais plutot
    DELETE FROM CREATE_LPDLS WHERE LADATE = convert(datetime,'16/02/2007',103)
    car j'ai essayé dans mon analyseur de requête et ça marche.
    est ce que tu vois ?

  7. #7
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    essaye de mettre des " ou de doubler les ' :

    avec les "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'DELETE FROM ' + <NomTable> + ' WHERE LADATE = CONVERT(DATETIME,"' + @vardate + '",103)'
    en doublant les '
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    'DELETE FROM ' + <NomTable> + ' WHERE LADATE = CONVERT(DATETIME,''' + @vardate + ''',103)'
    j'suis vert !

  8. #8
    Membre régulier
    Inscrit en
    Juin 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 141
    Points : 80
    Points
    80
    Par défaut
    Merci énormément à KUZCO et HULK ça marche parfaitement.

    voici le code final :
    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 PROCEDURE SUPPRESSION @VarDate  varchar(10)
    AS
    DECLARE @nomtable VARCHAR(25)
    DECLARE  supp 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 supp
     
    	FETCH NEXT FROM supp INTO @nomtable
    		WHILE @@FETCH_STATUS = 0
    			BEGIN
    	                       		DECLARE @sql nvarchar(255)
    	                       		SET @sql = N'DELETE FROM ' + @nomtable + N'  WHERE LADATE =  '''+@VarDate+''''
    	                       		EXEC sp_executesql @sql
     
    				PRINT @nomtable
    				PRINT @sql
    				FETCH NEXT FROM supp INTO @nomtable
    			END
    CLOSE supp
    DEALLOCATE supp
    GO

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

Discussions similaires

  1. [2000] SQL SERVER 2000 : procedure stockée
    Par jobe3141 dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 10/04/2013, 11h58
  2. SQL Server 2012 : Procedures stockées et Statistiques
    Par Donpi dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 21/06/2012, 21h02
  3. SQl server 2000 Procédure stockée
    Par Guena5635 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/04/2008, 10h02
  4. [sql server 2000] Procédure stockée ~ Récursif (débutant)
    Par Sadneth dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/02/2006, 11h16
  5. Procedure stockée avec ntext dans SQL server 2000
    Par nagababa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/11/2003, 20h46

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