it-swarm.it

Rinominare la colonna SQL Server 2008

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.

531
Serhio g. Lazin

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. 

999
Habib

In alternativa a SQL, puoi farlo in Microsoft SQL Server Management Studio. Ecco alcuni modi rapidi utilizzando la GUI:

Primo modo

Lento doppio clic sulla colonna. Il nome della colonna diventerà una casella di testo modificabile.


Seconda Via

Fare clic con il tasto destro sulla colonna e scegliere Rinomina dal menu di scelta rapida.

Per esempio:

To Rename column name


Terza via

In questo modo è preferibile quando è necessario rinominare più colonne contemporaneamente.

  1. Fare clic con il tasto destro sulla tabella che contiene la colonna che deve essere rinominata.
  2. Fai clic su Design.
  3. Nel pannello di progettazione della tabella, fare clic e modificare la casella di testo del nome della colonna che si desidera modificare.

Per esempio:MSSMS Table Design Example

NOTA: So che OP ha richiesto specificamente la soluzione SQL, ho pensato che questo potesse aiutare gli altri :)

86
Carrie Kendall

Provare:

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

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';
16
Taher

Sarebbe un buon suggerimento usare una funzione già incorporata, ma un altro modo è quello di:

  1. Crea una nuova colonna con lo stesso tipo di dati e NUOVO NOME. 
  2. Esegui un'istruzione UPDATE/INSERT per copiare tutti i dati nella nuova colonna. 
  3. Rilascia la vecchia colonna.

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.

15
NeverHopeless

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.

12

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à.
  • Non inserire NewColumnName in [], ne risulterà in [[NewColumnName]].
9
HonzaB

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.

2
Tahir77667

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
1
Rikin Patel

Oppure puoi semplicemente fare doppio clic sulla colonna in SQL Management Studio due volte e rinominarlo tramite l'interfaccia utente ...

0
Dave Cole