web-dev-qa-db-fra.com

Renommer la colonne SQL Server 2008

J'utilise SQL Server 2008 et Navicat. Je dois renommer une colonne dans une table à l'aide de SQL.

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

Cette déclaration ne fonctionne pas.

531
Serhio g. Lazin

Utilisez sp_rename

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

Voir: SQL SERVER - Comment renommer un nom de colonne ou un nom de table

Documentation: sp_rename (Transact-SQL)

Pour votre cas ce serait:

EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'

N'oubliez pas d'utiliser des guillemets simples pour indiquer vos valeurs. 

999
Habib

À la place de SQL, vous pouvez le faire dans Microsoft SQL Server Management Studio. Voici quelques moyens rapides d'utiliser l'interface graphique:

Première façon

Double-clic lent sur la colonne. Le nom de la colonne deviendra une zone de texte modifiable.


Deuxième façon

Faites un clic droit sur la colonne et choisissez Renommer dans le menu contextuel.

Par exemple:

To Rename column name


Troisième voie

Cette méthode est préférable lorsque vous devez renommer plusieurs colonnes en une fois.

  1. Cliquez avec le bouton droit sur la table contenant la colonne à renommer.
  2. Cliquez sur Design.
  3. Dans le panneau de conception de table, cliquez sur et modifiez la zone de texte du nom de la colonne à modifier.

Par exemple:MSSMS Table Design Example

NOTE: Je sais que OP a spécifiquement demandé une solution SQL, car cela pourrait aider les autres :)

86
Carrie Kendall

Essayer:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
52
TechDo

Vous devriez également spécifier le schéma de la table ou vous pourriez obtenir cette erreur:

Msg 15248, niveau 11, état 1, procédure sp_rename, ligne 238 Le fichier Le paramètre @objname est ambigu ou le @objtype (COLUMN) revendiqué est faux.

S'il s'agit d'un script de déploiement, je vous recommanderais également d'y ajouter une sécurité supplémentaire.

    if  exists (select 1 from sys.columns where name = 'OldColumnName' and object_name(object_id) = 'TableName') AND
not exists (select 1 from sys.columns where name = 'NewColumnName' and object_name(object_id) = 'TableName')
EXEC sp_RENAME 'SchemaName.TableName.OldColumnName', 'NewColumnName', 'COLUMN';
16
Taher

Il serait judicieux d'utiliser une fonction déjà intégrée, mais une autre solution consiste à:

  1. Créez une nouvelle colonne avec le même type de données et un nouveau nom. 
  2. Exécutez une instruction UPDATE/INSERT pour copier toutes les données dans une nouvelle colonne. 
  3. Déposez l'ancienne colonne.

L'avantage d'utiliser le sp_rename est qu'il prend en charge toutes les relations qui lui sont associées.

De la documentation :

sp_rename renomme automatiquement l'index associé chaque fois qu'une contrainte PRIMARY KEY ou UNIQUE est renommée. Si un index renommé est lié à une contrainte PRIMARY KEY, la contrainte PRIMARY KEY est également renommée automatiquement par sp_rename. sp_rename peut être utilisé pour renommer les index XML primaire et secondaire.

15
NeverHopeless

Vous pouvez utiliser sp_rename pour renommer une colonne.

USE YourDatabase;  
GO  
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
GO  

Le premier paramètre est l'objet à modifier, le deuxième paramètre est le nouveau nom qui sera attribué à l'objet et le troisième paramètre COLUMN informe le serveur que le changement de nom est pour le column, et peut également être utilisé pour renommer tables, index et alias data type.

12

Puisque je viens souvent ici et que je me demande ensuite comment utiliser les crochets, cette réponse pourrait être utile pour ceux qui, comme moi, sont bien avisés.

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • La OldColumnName ne doit pas être dans []. Ça ne marchera pas.
  • Ne mettez pas NewColumnName dans [], cela donnera [[NewColumnName]].
9
HonzaB

Sql Server Management Studio possède des procédures stockées (SP) définies par le système.
L’un d’eux est utilisé pour renommer une colonne.Le SP est sp_rename 

Syntaxe: _ nom_spaine '[nom_table]. Nom_colonne_old', 'nouveau_nom_colonne'
Pour obtenir de l'aide, reportez-vous à cet article: sp_rename de Microsoft Docs

Note: Lors de l'exécution de ce SP, le serveur SQL vous enverra un message d'avertissement sous la forme 'Attention: toute partie du nom d'un objet peut entraîner la rupture des scripts et des procédures stockées '. Ceci n’est critique que si vous avez écrit votre propre sp qui implique la colonne de la table que vous êtes sur le point de modifier.

2
Tahir77667

Version améliorée de @Taher

DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @OldColumnName AS VARCHAR(128)
DECLARE @NewColumnName AS VARCHAR(128)
DECLARE @ParamValue AS VARCHAR(1000)

SET @SchemaName = 'dbo'
SET @TableName = 'tableName'
SET @OldColumnName = 'OldColumnName'
SET @NewColumnName = 'NewColumnName'
SET @ParamValue = @SchemaName + '.' + @TableName + '.' + @OldColumnName

IF EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @OldColumnName AND OBJECT_NAME(object_id) = @TableName
)
AND NOT EXISTS
(
    SELECT 1 FROM sys.columns WHERE name = @NewColumnName AND OBJECT_NAME(object_id) = @TableName
)
BEGIN
    EXEC sp_rename @ParamValue, @NewColumnName, 'COLUMN';
END
1
Rikin Patel

Ou vous pouvez simplement cliquer deux fois sur la colonne dans SQL Management Studio et la renommer via l'interface utilisateur ...

0
Dave Cole