Partage
  • Partager sur Facebook
  • Partager sur Twitter

Renomer une colonne sur sqlServer avec nom variable

Sujet résolu
    26 mars 2011 à 14:00:55

    Bonjour, je cherche à créer une procédure stocké permettant de renommer une colonne d'une table. La procédure stocké prend 2 paramètres, le nom de la colonne à modifier et le nouveau nom.

    En cherchant sur le net j'ai pu trouver
    CREATE PROCEDURE [dbo].[modifier_collone_edition_in_carte_edition]
    	@ancien_nom varchar(255),
    	@nouveau_nom varchar(255)
    AS
    	EXECUTE sp_rename N'dbo.carte_editions.ancien_nom', N'nouveau_nom', 'COLUMN'
    RETURN 0
    

    Donc j'ai tenté de transformé la requête de divers façon pour que ce soit mes paramètre qui soit prise en compte mais je n'y arrive pas.
    Quelqu'un aurait une idée pour le faire?

    Ma dernière tentative à été :
    CREATE PROCEDURE [dbo].[modifier_collone_edition_in_carte_edition]
    	@ancien_nom varchar(255),
    	@nouveau_nom varchar(255)
    AS
    	exec ("EXECUTE sp_rename N'dbo.carte_editions."+@ancien_nom+"', N'"+@nouveau_nom+"', 'COLUMN'")
    RETURN 0
    

    Mais j'obtiens l'erreur : "Syntaxe incorrecte vers 'EXECUTE sp_rename N'dbo.carte_editions.'."

    Je travaille sous visual studio 2010 avec sql Serveur.

    merci
    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2011 à 16:16:56

      Ahem :-°

      CREATE PROCEDURE [dbo].[modifier_collone_edition_in_carte_edition]
      	@ancien_nom varchar(255),
      	@nouveau_nom varchar(255)
      AS
      	EXECUTE sp_rename N'dbo.carte_editions.' + @ancien_nom, @nouveau_nom, 'COLUMN'
      RETURN 0
      


      La procédure sp_rename attend des strings en paramètres, et ça tombe bien tes paramètres sont des strings... Ne va pas chercher plus loin que nécessaire ;)
      • Partager sur Facebook
      • Partager sur Twitter
        26 mars 2011 à 16:33:31

        merci pour la réponse. j'avais essayé, mais sa me met cette erreur:

        Syntaxe incorrecte vers '+'.
        • Partager sur Facebook
        • Partager sur Twitter
          26 mars 2011 à 17:11:18

          Essaie comme ceci:

          CREATE PROCEDURE [dbo].[modifier_collone_edition_in_carte_edition]
          	@ancien_nom varchar(255),
          	@nouveau_nom varchar(255)
          AS
          	EXECUTE sp_rename ('dbo.carte_editions.' + @ancien_nom), @nouveau_nom, 'COLUMN'
          RETURN 0
          

          • Partager sur Facebook
          • Partager sur Twitter
            26 mars 2011 à 17:17:24

            toujours une erreur, mais cette fois c'est :

            Syntaxe incorrecte vers 'dbo.carte_editions.'

            Edit :
            je vient de tester sa :
            CREATE PROCEDURE [dbo].[modifier_collone_edition_in_carte_edition]
            	@ancien_nom varchar(255),
            	@nouveau_nom varchar(255)
            AS
            	EXECUTE sp_rename @ancien_nom, @nouveau_nom, 'COLUMN'
            RETURN 0
            

            Sa fonctionne. Donc n'y a t-il pas moyen, de faire quelque chose du genre @ancien_nom = 'dbo.carte_editions.'+@ancien_nom ?
            • Partager sur Facebook
            • Partager sur Twitter
              26 mars 2011 à 17:21:48

              Grmbl :colere2:
              Il fait le malin hein ? OK, dans ces conditions...

              CREATE PROCEDURE [dbo].[modifier_collone_edition_in_carte_edition]
              	@ancien_nom varchar(255),
              	@nouveau_nom varchar(255)
              AS
                  DECLARE @ancienne_colonne varchar(300) = 'dbo.carte_editions.' + @ancien_nom
                  EXECUTE sp_rename @ancienne_colonne, @nouveau_nom, 'COLUMN'
              RETURN 0
              

              Hop, on n'en parle plus :p
              • Partager sur Facebook
              • Partager sur Twitter
                26 mars 2011 à 17:26:11

                ha ben tu as répondu à ma question.

                Mais il continu à faire le malin ... :

                erreur :
                Msg 139, Niveau 15, État 1, Procédure modifier_collone_edition_in_carte_edition, Ligne 0
                Impossible d'attribuer une valeur par défaut à une variable locale.
                Msg 137, Niveau 15, État 2, Procédure modifier_collone_edition_in_carte_edition, Ligne 6
                La variable scalaire "@ancienne_colonne" doit être déclarée.

                j'ai essayer :
                CREATE PROCEDURE [dbo].[modifier_collone_edition_in_carte_edition]
                	@ancien_nom varchar(255),
                	@nouveau_nom varchar(255)
                AS
                    DECLARE @ancienne_colonne varchar(300) 
                	@ancienne_colonne = 'dbo.carte_editions.' + @ancien_nom
                    EXECUTE sp_rename @ancienne_colonne, @nouveau_nom, 'COLUMN'
                RETURN 0
                


                mais sa met l'erreur :
                Msg 102, Niveau 15, État 1, Procédure modifier_collone_edition_in_carte_edition, Ligne 6
                Syntaxe incorrecte vers '@ancienne_colonne'.
                Msg 137, Niveau 15, État 2, Procédure modifier_collone_edition_in_carte_edition, Ligne 7
                La variable scalaire "@ancienne_colonne" doit être déclarée.
                • Partager sur Facebook
                • Partager sur Twitter
                  26 mars 2011 à 17:34:02

                  Ah, tu utilises une version d'SQL Server inférieure à la version 2008 on dirait (2005 ?).

                  La syntaxe pour assigner une valeur à une variable locale est la suivante:
                  CREATE PROCEDURE [dbo].[modifier_collone_edition_in_carte_edition]
                  	@ancien_nom varchar(255),
                  	@nouveau_nom varchar(255)
                  AS
                      DECLARE @ancienne_colonne varchar(300)
                      SET @ancienne_colonne = 'dbo.carte_editions.' + @ancien_nom
                      EXECUTE sp_rename @ancienne_colonne, @nouveau_nom, 'COLUMN'
                  RETURN 0
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 mars 2011 à 17:43:15

                    Sa y est sa marche. j'avais essayer de préciser "dbo.carte_editions." à chaque appel et sa fonctionnait. Mais sa m'embêtai de devoir le préciser.
                    Avec ta méthode sa fonctionne parfaitement bien.

                    Sinon je n'est que Visual Studio 2008 et 2010 d'installer. pour la base de donnée j'utilise les SQL expresse qui est installé avec.

                    En tous cas merci beaucoup. Tu m'a résolut 2 problème en 2 jours.

                    Je marque le sujet comme résolut.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Renomer une colonne sur sqlServer avec nom variable

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown