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.
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.
À la place de SQL
, vous pouvez le faire dans Microsoft SQL Server Management Studio. Voici quelques moyens rapides d'utiliser l'interface graphique:
Double-clic lent sur la colonne. Le nom de la colonne deviendra une zone de texte modifiable.
Faites un clic droit sur la colonne et choisissez Renommer dans le menu contextuel.
Par exemple:
Cette méthode est préférable lorsque vous devez renommer plusieurs colonnes en une fois.
Par exemple:
NOTE: Je sais que OP a spécifiquement demandé une solution SQL, car cela pourrait aider les autres :)
Essayer:
EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
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';
Il serait judicieux d'utiliser une fonction déjà intégrée, mais une autre solution consiste à:
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.
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
.
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';
OldColumnName
ne doit pas être dans []
. Ça ne marchera pas.NewColumnName
dans []
, cela donnera [[NewColumnName]]
.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.
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
Ou vous pouvez simplement cliquer deux fois sur la colonne dans SQL Management Studio et la renommer via l'interface utilisateur ...