Sto usando SQL Server 2008 e Navicat. Devo rinominare una colonna in una tabella usando SQL.
ALTER TABLE table_name RENAME COLUMN old_name to new_name;
Questa affermazione non funziona.
Utilizza sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
Vedi: SQL SERVER - Come rinominare un nome di colonna o nome tabella
Documentazione: sp_rename (Transact-SQL)
Per il tuo caso sarebbe:
EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
Ricorda di usare le virgolette singole per racchiudere i tuoi valori.
In alternativa a SQL
, puoi farlo in Microsoft SQL Server Management Studio. Ecco alcuni modi rapidi utilizzando la GUI:
Lento doppio clic sulla colonna. Il nome della colonna diventerà una casella di testo modificabile.
Fare clic con il tasto destro sulla colonna e scegliere Rinomina dal menu di scelta rapida.
Per esempio:
In questo modo è preferibile quando è necessario rinominare più colonne contemporaneamente.
Per esempio:
NOTA: So che OP ha richiesto specificamente la soluzione SQL, ho pensato che questo potesse aiutare gli altri :)
Provare:
EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
Si dovrebbe anche specificare lo schema della tabella o si potrebbe ottenere questo errore:
Messaggio 15248, livello 11, stato 1, procedura sp_rename, riga 238 o parametro @objname è ambiguo o il @objtype richiesto (COLUMN) è sbagliato.
Se si tratta di uno script di implementazione, consiglierei anche di aggiungere un po 'di sicurezza aggiuntiva.
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';
Sarebbe un buon suggerimento usare una funzione già incorporata, ma un altro modo è quello di:
Il vantaggio dietro l'uso di sp_rename
è che si prende cura di tutte le relazioni ad esso associate.
Dalla documentazione :
sp_rename rinomina automaticamente l'indice associato ogni volta che un vincolo PRIMARY KEY o UNIQUE viene rinominato. Se un indice rinominato è legato a un vincolo PRIMARY KEY, anche il vincolo PRIMARY KEY viene automaticamente rinominato da sp_rename. sp_rename può essere utilizzato per rinominare gli indici XML primari e secondari.
Puoi usare sp_rename
per rinominare una colonna.
USE YourDatabase;
GO
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';
GO
Il primo parametro è l'oggetto da modificare, il secondo parametro è il nuovo nome che verrà assegnato all'oggetto e il terzo parametro COLUMN informa il server che la ridenominazione è per column
, e può anche essere usato per rinominare tables
, index
e alias data type
.
Dato che vengo spesso qui e poi mi chiedo come usare le parentesi, questa risposta potrebbe essere utile per quelli come me.
EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN';
OldColumnName
non deve essere in []
. Non funzionerà.NewColumnName
in []
, ne risulterà in [[NewColumnName]]
.Sql Server management studio ha alcune Stored Procedures (SP) definite dal sistema
Uno dei quali è usato per rinominare una colonna. SP è sp_rename
Sintassi: sp_rename '[nome_tabella] .old_column_name', 'new_column_name'
Per ulteriore aiuto consulta questo articolo: sp_rename di Microsoft Docs
Nota: Durante l'esecuzione di questo SP il server sql ti darà un messaggio di attenzione come 'Attenzione: la modifica di qualsiasi parte di un nome di oggetto potrebbe interrompere script e stored procedure '. Questo è fondamentale solo se hai scritto il tuo sp che coinvolge la colonna nella tabella che stai per cambiare.
Versione migliorata di @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
Oppure puoi semplicemente fare doppio clic sulla colonna in SQL Management Studio due volte e rinominarlo tramite l'interfaccia utente ...