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 :

AIde sur Procédure Stockée (paramètres)


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut AIde sur Procédure Stockée (paramètres)
    Bonjour à tous !


    Tout d'abord merci à vous pour votre future aide .


    J'aimerais mettre en place une procédure stockée pour rendre plus simple les sauvegardes (Bon il y a d'autres moyen plus simple que celui que je veux mettre en place mais je suis curieux de savoir comment faire fonctionner celui ci.

    Voici le code de la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Create procedure sauvegarde @Nom varchar(50)
    as
     
    BACKUP DATABASE @Nom TO DISK = 'D:\MSSQL\BACKUP\Sauvegarde\@Nom.bak'
     
    go
    Le problème bien évidemment est que dans 'D:\MSSQL\BACKUP\Sauvegarde\@Nom.bak' , il ne prend pas le @Nom.bak en tant que paramètres.


    Quelqu'un connait un moyen de remédier à ca ?



    Merci

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Vous pouvez utiliser ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DECLARE @nomback VARCHAR(20);
    SET @nomback = 'test.bak';
     
    EXEC('BACKUP DATABASE ' + @Nom +  ' TO DISK = 'D:\MSSQL\BACKUP\Sauvegarde\' + @nomback + '''');
    ++

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci,

    Même si je ne comprend pas du tout, ca fonctionne

  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 : 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,

    L'excellent Mikedavem a fait du SQL dynamique, c'est-à-dire qu'il a construit la commande SQL dans une chaîne de caractères qu'il transmet directement au moteur de base de données

    @++

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    A d'accord je comprends mieux,

    Et bien moi qui suit en alternance je vais souffler à mon prof de SQL de nous faire apprendre les requêtes dynamiques car ca m'a l'air beaucoup plus complet .


    Par contre dernière petite question, pourquoi tant de ' à la fin de la requête ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    le premier ' pour débuter une chaine de caractère
    les deux suivant pour écrire l'apostrophe qui entoure paramètre (il faut doubler les apostrophes en sql)
    le dernier ' pour terminer la chaine de caractère.
    Blog Perso | Kankuru (logiciel gratuit pour SQL Server)

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Je vois,

    Merci à tous

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour ici,


    Un petit up car je ne dois pas avoir tout compris ()

    Dans le cas du dessus, pour les requetes SQL dynamiques,
    est ce que ce sont les parametre ou les commandes qui doivent se trouver entre des ' ' ?
    Par exemple, ce que je dois mettre en des guillemets c'est : +@nom+ ou bien les 'Backup database' ?

    Car dans le même style j'ai voulu créer une requête dynamique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE procedure restauration_avec_un_autre_nom @Nom_voulu  varchar(50), @nom varchar(50), @nom_bak varchar(100)
     
    AS
     
     
    EXEC('restore database '+@Nom_voulu+' FROM DISK = ''D:\MSSQL\BACKUP\'+@nom+'\'+@nom_bak+'.bak'' , move '+@nom+'_Data'' to ''D:mssql\data\'+@nom_voulu+'_data.mdf'' , move '+@nom_voulu+'_Log'' to ''D:mssql\data\'+@nom_voulu+'_log.ldf''');
     
    go
    mais lorsque je l'execute à l'aide de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec restauration_avec_un_autre_nom test2, test, test
    il me met :
    syntaxe incorrecte vers 'test_Data'.

    Voyez-vous la source du problème ?

  9. #9
    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,

    Pour débugger, faites un PRINT de la chaîne SQL avant de l'exécuter :

    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
    CREATE PROCEDURE restauration_avec_un_autre_nom
    	@Nom_voulu  VARCHAR(50),
    	@nom VARCHAR(50),
    	@nom_bak VARCHAR(100)
    AS
    BEGIN
    	DECLARE @sql VARCHAR(1024)
    	SET @sql = 'RESTORE DATABASE ' + @Nom_voulu + 
    				' FROM DISK = ''D:\MSSQL\BACKUP\' + @nom + '\' + @nom_bak + '.bak''' +
    				' WITH MOVE ''' + @nom + '_Data'' TO ''D:\mssql\DATA\' + @nom_voulu + '_data.mdf''' +
    				', MOVE ''' + @nom_voulu + '_Log'' TO ''D:\mssql\DATA\' + @nom_voulu + '_log.ldf'''
     
    	PRINT @sql
    	--EXEC(@sql)
    END
    @++

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Ah c'est cette commande qui m'aurait éviter de jouer pendant deux heures avec tout les différents ' ' .


    Merci ! ça permet effectivement de voir qu'il manque une virgule par ci, une autre par la

Discussions similaires

  1. [2K8] Paramètre sur procédure stockée mysql
    Par Wishmaster69 dans le forum SSRS
    Réponses: 0
    Dernier message: 05/08/2010, 15h42
  2. aide sur procédures stockées
    Par laaroussi1 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/10/2007, 14h55
  3. Paramètres sur Procédure stockée
    Par StarMusic dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/03/2006, 14h58
  4. PB sur procédure stockée
    Par rafounette dans le forum Oracle
    Réponses: 7
    Dernier message: 09/03/2006, 14h29
  5. [C#] Procédures stockées - Paramètres "null"
    Par aymron dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/12/2005, 17h06

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