Ganti nama kolom SQL Server 2008

653

Saya menggunakan SQL Server 2008 dan Navicat. Saya perlu mengganti nama kolom dalam tabel menggunakan SQL.

ALTER TABLE table_name RENAME COLUMN old_name to new_name;

Pernyataan ini tidak berfungsi.

Serhio g. Lazin
sumber
5
Perhatikan bahwa ini bukan duplikat dari pertanyaan # 174582 yang terhubung dengan swetha: yang ini adalah MS SQL-spesifik, yang satu adalah database-agnostik.

Jawaban:

1195

Menggunakan sp_rename

EXEC sp_RENAME 'TableName.OldColumnName' , 'NewColumnName', 'COLUMN'

Lihat: SQL SERVER - Cara Mengganti Nama Nama Kolom atau Nama Tabel

Dokumentasi: sp_rename (Transact-SQL)

Untuk kasus Anda adalah:

EXEC sp_RENAME 'table_name.old_name', 'new_name', 'COLUMN'

Ingatlah untuk menggunakan tanda kutip tunggal untuk melampirkan nilai Anda.

Habib
sumber
24
Perhatikan bahwa Anda tidak harus memasukkan NewColumnName dalam tanda kurung, karena SQL Server kemudian akan menggunakan [[[NewColumnName]]]] sebagai nama kolom baru. Juga, sp_rename harus diawali dengan EXEC atau EXECUTE.
Mark Freeman
29
Anda diizinkan dan didorong untuk menempatkan tanda kurung di parameter pertama, mengidentifikasi kolom, tetapi tidak di parameter kedua. Seperti ini:EXEC sp_RENAME '[TableName].[OldColumnName]', 'NewColumnName', 'COLUMN'
Niels Brinch
2
Anda harus mencatat dalam jawaban Anda bahwa ini prosedur yang tersimpan nilai-nilai pegangan default, nol dll contraints saat melakukan mengubah nama, sebagai lawan polos alter tableyang akan GAGAL jika kendala tersebut ada.
Tuncay Göncüoğlu
4
Perhatikan bahwa jika Anda menggunakan 'table_name.new_name' maka itu menjadi [skema]. [Table_name]. [Table_name.new_name] - jadi jangan letakkan nama tabel itu di nama baru! (benar dalam jawaban ini, hanya menambahkan catatan untuk mengintip)
Mark Schultheiss
1
Jika ada skema dalam database Anda harus meletakkan nama skema sebelum nama tabel: EXEC sp_RENAME 'schema_name.table_name.old_name', 'new_name', 'COLUMN'
amin
106

Atau SQL, Anda dapat melakukan ini di Microsoft SQL Server Management Studio. Berikut adalah beberapa cara cepat menggunakan GUI:

Jalan Pertama

Lambat klik dua kali pada kolom. Nama kolom akan menjadi kotak teks yang dapat diedit.


Jalan Kedua

Klik kanan pada kolom dan pilih Ubah nama dari menu konteks.

Sebagai contoh:

Untuk Mengganti nama nama kolom


Jalan Ketiga

Cara ini lebih disukai ketika Anda perlu mengganti nama beberapa kolom sekaligus.

  1. Klik kanan pada tabel yang berisi kolom yang perlu diganti namanya.
  2. Klik Desain .
  3. Di panel desain tabel, klik dan edit kotak teks dari nama kolom yang ingin Anda ubah.

Sebagai contoh: Contoh Desain Tabel MSSMS

CATATAN: Saya tahu OP secara khusus meminta solusi SQL, berpikir ini mungkin membantu orang lain :)

Carrie Kendall
sumber
1
Atau pengguna tidak memiliki hak istimewa.
Carrie Kendall
6
Tidak pernah melakukannya. Anda menyalin tabel, lalu menjatuhkan yang lama dan menamainya kembali. JANGAN PERNAH menggunakan GUI PERNAH untuk mengubah apa pun tentang tabel.
HLGEM
6
@ HLEM itu pernyataan selimut yang cukup besar. Dalam hal apa pun, dapatkah Anda memberikan sumber daya apa pun yang telah Anda jelaskan? yaitu menjatuhkan meja, dll.
Carrie Kendall
2
@CrierieKendall, skrip perubahan dari GUI alih-alih membuatnya dan Anda akan melihat. Inilah sebabnya mengapa jauh lebih lambat untuk melakukan perubahan menggunakan GUI ke tabel besar daripada menggunakan sp_rename atau mengubah tabel. Selanjutnya, perubahan pada struktur basis data adalah perubahan kode dan harus dalam kontrol sumber seperti kode lain sehingga harus dalam skrip. Ini sangat penting jika Anda tidak mengizinkan hak database produksi dev untuk mengubah tabel karena Anda memerlukan skrip dalam hal apa pun. Dan Anda tidak ingin menyalin, menjatuhkan, dan membuat ulang tabel dengan jutaan catatan di prod.
HLGEM
18
Saya baru saja mengganti nama tabel SQL Server 2012 menggunakan Management Studio dengan menjalankan profiler dan menggunakan sp_rename. Tidak dapat berbicara untuk versi sebelumnya.
Steve Dowling
58

Mencoba:

EXEC sp_rename 'TableName.OldName', 'NewName', 'COLUMN'
TechDo
sumber
27

Anda juga harus menentukan skema tabel atau Anda mungkin mendapatkan kesalahan ini:

Msg 15248, Level 11, Status 1, Prosedur sp_rename, Baris 238 Entah parameter @objname ambigu atau @objtype (COLUMN) yang diklaim salah.

Jika ini adalah skrip penerapan, saya juga akan merekomendasikan untuk menambahkan beberapa keamanan tambahan.

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';
Taher
sumber
Saya suka pendekatan aman ini, bagus untuk menulis migrasi yang mungkin / mungkin tidak berjalan di lingkungan yang berbeda.
Adil H. Raza
seperti cek keberadaan, membuat saya merasa ok menjalankan kembali sebagai bagian dari kumpulan skrip lain
diketahui
19

Ini akan menjadi saran yang bagus untuk menggunakan fungsi yang sudah terpasang tetapi cara lain adalah:

  1. Buat kolom baru dengan tipe data yang sama dan NAMA BARU.
  2. Jalankan pernyataan UPDATE / INSERT untuk menyalin semua data ke kolom baru.
  3. Jatuhkan kolom yang lama.

Manfaat di balik penggunaannya sp_renameadalah bahwa ia menangani semua hubungan yang terkait dengannya.

Dari dokumentasi :

sp_rename secara otomatis mengubah nama indeks terkait setiap kali PRIMARY KEY atau kendala UNIQUE diganti namanya. Jika indeks yang diubah namanya dikaitkan dengan batasan PRIMARY KEY, batasan PRIMARY KEY juga secara otomatis diganti nama dengan sp_rename. sp_rename dapat digunakan untuk mengganti nama indeks XML primer dan sekunder.

Tidak ada yang hilang
sumber
* Pada langkah 1, NULL harus diizinkan di kolom baru * Secara opsional tambahkan langkah ke-4 untuk mengubah kolom baru, bahwa itu tidak mengizinkan nilai
BitLauncher
16

Anda dapat menggunakan sp_renameuntuk mengganti nama kolom.

USE YourDatabase;  
GO  
EXEC sp_rename 'TableName.OldColumnName', 'NewColumnName', 'COLUMN';  
GO  

Parameter pertama adalah objek yang akan diubah, parameter kedua adalah nama baru yang akan diberikan kepada objek, dan parameter ketiga COLUMN menginformasikan server bahwa nama diubah adalah untuk column, dan juga dapat digunakan untuk mengganti nama tables, indexdan alias data type.

Alexandre Neukirchen
sumber
2
Tidak mengerti, mengapa Anda menambahkan jawaban baru bahkan di atas 4 dari 5 menyebutkan tentang sp_rename ...?
Pawel Czapski
3
Pada titik tertentu, seseorang harus menjelaskan di sini operasi parameter, tidak ada yang melakukan ini
Alexandre Neukirchen
1
Ya, sebenarnya Anda benar, bagi saya itu sangat jelas tetapi bagi para pemain baru mungkin tidak.
Pawel Czapski
12

Karena saya sering datang ke sini dan kemudian bertanya-tanya bagaimana cara menggunakan kurung, jawaban ini mungkin berguna bagi mereka yang seperti saya.

EXEC sp_rename '[DB].[dbo].[Tablename].OldColumnName', 'NewColumnName', 'COLUMN'; 
  • The OldColumnNametidak harus dalam []. Itu tidak akan bekerja.
  • Jangan dimasukkan NewColumnNameke dalam [], itu akan menghasilkan [[NewColumnName]].
HonzaB
sumber
3

Sql Server management studio memiliki beberapa sistem yang ditetapkan Stored Procedures (SP).
Salah satunya digunakan untuk mengubah nama kolom. SP adalah sp_rename

Sintaks: sp_rename '[table_name] .old_column_name', 'new_column_name'
Untuk bantuan lebih lanjut lihat artikel ini: sp_rename oleh Microsoft Docs

Catatan: Pada pelaksanaan SP ini server sql akan memberi Anda pesan peringatan sebagai ' Perhatian: Mengubah bagian mana pun dari nama objek dapat memecahkan skrip dan prosedur tersimpan '. Ini sangat penting hanya jika Anda telah menulis sp Anda sendiri yang melibatkan kolom di tabel Anda akan berubah.

Tahir77667
sumber
2

Versi @Taher yang ditingkatkan

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
Rikin Patel
sumber
0

Atau Anda bisa memperlambat klik dua kali pada kolom di SQL Management Studio dan mengganti namanya melalui ...

Dave Cole
sumber
-1

Jalankan Kueri:

    SP_RENAME '[TableName].[ColumnName]','NewNameForColumn'
Purnima Bhatia
sumber
Tolong jangan ulangi jawaban yang sudah lama dan ada dengan banyak suara.
TT.