J'utilise SQL Server 2008 et Navicat. J'ai besoin de renommer une colonne d'une table en utilisant SQL.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Cette déclaration ne fonctionne pas.
J'utilise SQL Server 2008 et Navicat. J'ai besoin de renommer une colonne d'une table en utilisant SQL.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Cette déclaration ne fonctionne pas.
Réponses:
Utilisation 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 entourer vos valeurs.
EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
alter table
qui ÉCHOUERA si de telles contraintes existent.
Vous SQL
pouvez également le faire dans Microsoft SQL Server Management Studio. Voici quelques façons rapides d'utiliser l'interface graphique:
Double-cliquez lentement 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 seule fois.
Par exemple:
REMARQUE: je sais que OP a spécifiquement demandé une solution SQL, pensant que cela pourrait aider les autres :)
Vous devez é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 paramètre @objname est ambigu ou le @objtype (COLUMN) revendiqué est incorrect.
S'il s'agit d'un script de déploiement, je 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';
Ce serait une bonne suggestion d'utiliser une fonction déjà intégrée, mais une autre solution consiste à:
L'avantage derrière l'utilisation du 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 des index XML primaires et secondaires.
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 donné à 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
.
Comme je viens souvent ici et que je me demande ensuite comment utiliser les crochets, cette réponse pourrait être utile pour ceux comme moi.
EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';
OldColumnName
ne doit pas être dedans []
. Ça ne marchera pas.NewColumnName
en []
, il en résultera en [[NewColumnName]]
.Sql Server Management Studio possède des procédures stockées (SP) définies par le système,
dont l'une est utilisée pour renommer une colonne. Le SP est sp_rename
Syntaxe: sp_rename '[nom_table] .old_column_name', 'new_column_name'
Pour plus d'informations, reportez-vous à cet article: sp_rename de Microsoft Docs
Remarque: lors de l' exécution de ce SP, le serveur SQL vous enverra un message d'avertissement comme `` Attention: la modification d'une partie du nom d'un objet peut casser les scripts et les procédures stockées '' .Ceci n'est critique que si vous avez écrit votre propre sp qui implique la colonne dans le tableau que vous êtes sur le point de changer.
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
Exécuter la requête:
SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'