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 2005] Procédure stockée dynamique ?


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 31
    Points
    31
    Par défaut [SQL Server 2005] Procédure stockée dynamique ?
    Bonjour à tous,
    j'ai un petit soucis que je n'arrive actuellement pas à résoudre.

    Je dois faire un simple SELECT sur une table. Le problème, c'est que je ne connais pas à l'avance les colonnes de mon SELECT.

    Je programme en C# et dans mon fichier config il y a une clé qui me donne le nom des champs de mon SELECT, par exemple LastName.FirstName ou LastName.Email, ...

    J'utilise des procédures stockées, donc je ne sais pas comment je peux faire pour modifier celle-ci dynamiquement.

    On m'a dit d'utiliser EXEC, mais je ne sais trop comment.

    Pouvez-vous m'aider ?

    Merci

  2. #2
    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
    tu peux passer la liste de tes variables séparés par une virgule dans une varible @select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    create procedure dynamique
     
    @select varchar(500)
     
    AS
     
    DECLARE @QUERY AS VARCHAR(5000)
    SET @QUERY = 'SELECT ' + @select ' FROM lastname'
    EXEC(@QUERY)
    GO

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    Merci ca marche parfaitement.

    Par contre j'essaye de faire ca pour un Update, mais je n'y arrive pas.

    Voici ma stored procédure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE PROC [dbo].[UpdatePicture]
    @ProcedurePicture image,
    @ProcedureQuery VARCHAR(100)
    AS
    DECLARE @sql nvarchar(100)
    SET @sql=@ProcedureQuery
    EXEC dbo.sp_executesql @sql
    Et ma fonction Update:

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public void UpdatePicture(string path, string updateQuery)
            {
                MessageBox.Show(path);
                System.Diagnostics.Debug.WriteLine(path);
                MessageBox.Show(updateQuery);
                System.Diagnostics.Debug.WriteLine(updateQuery);
                //Nom de la procédure embarquée
                string storedProcedure = "UpdatePicture";
                try
                {
                    FileStream fileStreamPicture = new FileStream(@path, FileMode.Open, FileAccess.Read);
    		        BinaryReader binaryReaderPicture = new BinaryReader(fileStreamPicture);
    		        byte[] fileToSave = binaryReaderPicture.ReadBytes((int)fileStreamPicture.Length);
    		        //Déclaration de la connexion à la DB en allant chercher les paramètres dans le fichier de configuration
                    SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["PhotosManagement.Properties.Settings.PhotosManagementConnectionString"].ConnectionString);
    		        //Déclaration de la fonction à exécuter
    		        SqlCommand command = new SqlCommand(storedProcedure,connection);
    		        //Déclaration du type de fonction à exécuter
    		        command.CommandType = CommandType.StoredProcedure;
    		        //Déclaration des paramètres à envoyer
                    SqlParameter parameterPicture = command.Parameters.Add("@ProcedurePicture", SqlDbType.Binary, fileToSave.Length, "Picture");
                    //Valeur des paramètres à envoyer
                    parameterPicture.Value = fileToSave;
                    SqlParameter parameterQuery = command.Parameters.AddWithValue("@ProcedureQuery", updateQuery);
    		        //Ouverture de la connexion à la DB
    		        connection.Open();
    		        //Exécution de la procédure embarquée
    		        SqlDataReader reader = command.ExecuteReader();
    		        //Fermeture du reader
    		        reader.Close();
    		        //Fermeture de la connexion à la DB
    		        connection.Close();
    		        //Fermeture du file stream
    		        fileStreamPicture.Close();
    		        //Fermeture du binary reader
    		        binaryReaderPicture.Close();
                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
    Qui m'affiche les bons paramètres à passer:

    C:\Documents and Settings\mgh\Desktop\PhotosManagement\test\[a.b].gif
    UPDATE Users SET Picture = @ProcedurePicture WHERE LastName = a AND FirstName = b

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    L'erreur que je reçois c'est que je dois déclarer ma @ProcedurePicture alors que c'est fait...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    Up

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SET @sql=@ProcedureQuery
    ici ta requete vaut exactement :
    UPDATE Users SET Picture = @ProcedurePicture WHERE LastName = a AND FirstName = b

    il ne peut pas excuter ca, il ne sait pas ce qu'est @ProcedurePicture

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    Et le @ProcedurePicture image, il sert à quoi alors ?

    Comment puis-je faire ?

  8. #8
    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
    comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE PROC [dbo].[UpdatePicture]
    @ProcedurePicture varchar(200),
    @ProcedureQuery VARCHAR(100)
    AS
    DECLARE @sql nvarchar(100)
    SET @sql= 'UPDATE Users SET Picture = ' + @ProcedurePicture + ' WHERE LastName = a AND FirstName = b'
    EXEC dbo.sp_executesql @sql

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    Pourquoi Picture n'est plus de type image mais VARCHAR(200) ?

    Ca va jamais passer comme ca

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    Je sens qu'on va y arriver

    Ma query que j'envois via C#:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    updateQuery = "UPDATE Users SET Picture = ' + @ProcedurePicture + ' WHERE LastName = 'a' AND FirstName = 'b'";
    Et ma stored procedure:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE PROC [dbo].[Test]
    @ProcedurePicture VARCHAR(8000),
    @ProcedureQuery VARCHAR(100)
    AS
    DECLARE @sql nvarchar(100)
    SET @sql= @ProcedureQuery
    EXEC dbo.sp_executesql @sql
    Mais ca ne marche toujours pas, il me dit qu'il y a un problème de '

  11. #11
    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
    et comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    updateQuery = "UPDATE Users SET Picture = ' + @ProcedurePicture + ' WHERE LastName = "a" AND FirstName = "b" ";

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    Snif, toujours pas

    Il me dit Unclosed Quotation Mark

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    Bon j'ai trouvé pourquoi il me mettait ca.

    La query etait dans un champ de 100 caractères et ca dépassait un peu.

    J'ai mis à 200, l'update se fait correctement maintenant mais quand je veux afficher la photo, ca me met une erreur apparement le fichier photo n'a pas été bien envoyé

  14. #14
    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
    bah là tu update ton champ en stockant le chemin d'acces à ton image, pas l'image en elle meme, moi je l'ai jamais fait, je sais pas exactement ce qu'il faut faire.

    Moi je t'ai indiqué comment executer une requete dynamique.

Discussions similaires

  1. [ODBC] [SQL Server 2005] Procédure stockée
    Par geo54 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/06/2010, 10h48
  2. Réponses: 1
    Dernier message: 13/05/2009, 13h57
  3. SQL SERVER 2005 procédure stockée
    Par elrick richese dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/03/2009, 12h54
  4. [SQL-SERVER 2005]Procédure stockée avec table temporaire
    Par mathieu44800 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 03/08/2007, 15h18

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