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.
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.
Risposte:
Uso sp_rename
EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'
Vedere: SERVER SQL - Come rinominare un nome colonna o un nome tabella
Documentazione: sp_rename (Transact-SQL)
Per il tuo caso sarebbe:
EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'
Ricorda di utilizzare virgolette singole per racchiudere i tuoi valori.
EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
alter table
che fallirà se esistono tali vincoli.
In alternativa SQL
, è possibile farlo in Microsoft SQL Server Management Studio. Ecco alcuni modi rapidi per utilizzare la GUI:
Fai doppio clic lento sulla colonna. Il nome della colonna diventerà una casella di testo modificabile.
Fai clic con il tasto destro sulla colonna e scegli Rinomina dal menu contestuale.
Per esempio:
In questo modo è preferibile quando è necessario rinominare più colonne in una volta sola.
Per esempio:
NOTA: so che l'OP ha chiesto espressamente una soluzione SQL, pensavo che questo potesse aiutare gli altri :)
Dovresti anche specificare lo schema della tabella o potresti ricevere questo errore:
Messaggio 15248, livello 11, stato 1, procedura sp_rename, riga 238 Il parametro @objname è ambiguo o il @objtype richiesto (COLUMN) è errato.
Se si tratta di uno script di distribuzione, consiglierei anche di aggiungere ulteriore sicurezza ad esso.
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à integrata ma un altro modo per aggirare è:
Il vantaggio dietro l'utilizzo 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 viene rinominato un vincolo PRIMARY KEY o UNIQUE. 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 il 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 dentro []
. Non funzionerà.NewColumnName
in []
, il risultato sarà in [[NewColumnName]]
.Sql Server management studio ha alcuni Stored Procedure (SP) definiti dal sistema
Uno dei quali viene utilizzato per rinominare una colonna. SP è sp_rename
Sintassi: sp_rename '[table_name] .old_column_name', 'new_column_name'
Per ulteriori informazioni, consultare questo articolo: sp_rename di Microsoft Docs
Nota: Al momento dell'esecuzione di questo SP, il server sql fornirà un messaggio di avvertenza come " Attenzione: la modifica di qualsiasi parte del nome di un oggetto potrebbe interrompere script e procedure memorizzate ". 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
Esegui query:
SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'