1
votes

Ajoutez un préfixe pour chaque colonne

J'ai une table avec beaucoup de colonnes et je voudrais ajouter le préfixe ABC_ pour chaque colonne.

J'ai essayé la requête ci-dessous:

    SELECT syscolumns.name as old_column_name, 'ABC_' + syscolumns.name as new_column_name
    FROM sysobjects 
    JOIN syscolumns ON sysobjects.id = syscolumns.id
    WHERE sysobjects.name = 'ABCtable'
    ORDER BY sysobjects.name,syscolumns.colid

Lorsque j'exécute la requête ci-dessus, j'ai toutes mes colonnes avec le préfixe ABC_ mais dans ma table rien a changé.


8 commentaires

Vous venez de faire une instruction select régulière et ne lui avez pas dit de mettre à jour quoi que ce soit.


Double possible de Renommer la colonne SQL Server 2008


Pourquoi / comment l'ajout de ABC_ au début de tous les noms de colonnes va-t-il aider ici? Vous aurez toujours le même grand nombre de colonnes et vous avez maintenant empiré, par exemple. intellisense.


Non je dois faire ça pour réaliser une jointure avec une autre table. Ce n'est pas un doublon car dans mon cas je veux ajouter un préfixe pour chaque colonne pour ne pas renommer une colonne.


Avez-vous envisagé d'utiliser des alias de table pour lever l'ambiguïté des noms de colonne de différentes tables et des alias de colonne pour les étiqueter de manière unique?


Non, comment fais-tu ça?


Ne fais pas ça. Vous ne gagnerez rien!


Je vous demande de voter ma réponse si vous avez trouvé juste et utile.


3 Réponses :


0
votes

Vous pouvez utiliser sp_rename pour renommer une colonne / table.

EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN'


5 commentaires

Merci mais j'ai beaucoup de colonnes pas une seule: /


Copiez et collez simplement la requête, puis renommez-la. Vous pouvez l'exécuter en même temps.


J'ai 10 000 colonnes donc ce n'est pas la meilleure idée ...: /


10 000 colonnes?!? Il semble que votre base de données ait vraiment besoin d'être repensée.


également impossible à moins d'utiliser des colonnes clairsemées



1
votes

Vous pouvez essayer quelque chose comme ça.

    DECLARE @Colums AS TABLE(IndexNo INT IDENTITY(1,1), OldCol VARCHAR(MAX), NewCol VARCHAR(MAX))
    INSERT INTO @Colums
    SELECT syscolumns.name as old_column_name, 'ABC_' + syscolumns.name as new_column_name
    FROM sysobjects 
    JOIN syscolumns ON sysobjects.id = syscolumns.id
    WHERE sysobjects.name = 'ABCtable'
    ORDER BY sysobjects.name,syscolumns.colid


    DECLARE @I INT=1;
    WHILE EXISTS(SELECT * FROM @Colums WHERE IndexNo=@I)
    BEGIN
        DECLARE @OldCol VARCHAR(MAX)='', @NewCol VARCHAR(MAX)=''
        SELECT @OldCol='ABCtable.'+OldCol, @NewCol=NewCol FROM @Colums WHERE IndexNo = @I

        EXEC sp_rename @OldCol, @NewCol, 'COLUMN'

        SET @I = @I+1;
    END


1 commentaires

C'est exactement ce que je voulais! Merci beaucoup !



0
votes

Vous pouvez créer un curseur comme indiqué ci-dessous. Veuillez trouver la requête ci-dessous.

create table studInfo (Id int, EmpCode Varchar(20), Name Varchar(20))
insert into studInfo values (1,'1001', 'A'),(2, '1002','B'), (3, '1003','C'), (4,'1004', 'D'), (5,'1005', 'E')

select * from studInfo

Declare @OldSQLcolName Varchar(50)
Declare @NewColName Varchar(50)

DECLARE RenameCursor CURSOR FOR
SELECT 'studInfo.' + COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'studInfo'

OPEN RenameCursor;
FETCH NEXT FROM RenameCursor INTO @OldSQLcolName;

WHILE @@FETCH_STATUS = 0
   BEGIN      
      set @NewColName = 'ABC_' + Replace(@OldSQLcolName,'studInfo.','')
      --select @OldSQLcolName, @NewColName

      EXEC sp_rename @OldSQLcolName, @NewColName, 'COLUMN'
      FETCH NEXT FROM RenameCursor INTO @OldSQLcolName;   
   END

CLOSE RenameCursor
DEALLOCATE RenameCursor

select * from studInfo
drop table studInfo

Le résultat avant et après le nom de colonne mis à jour est comme indiqué ci-dessous

 entrez la description de l'image ici p>

Vous pouvez trouver la démo en direct Démo en direct ici p >


0 commentaires