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é.
3 Réponses :
Vous pouvez utiliser sp_rename pour renommer une colonne / table.
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN'
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
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
C'est exactement ce que je voulais! Merci beaucoup !
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
Vous pouvez trouver la démo en direct Démo en direct ici p >
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.