Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Ganti nama Kolom di SQL Server (T-SQL)

Di SQL Server, Anda dapat menggunakan sp_rename prosedur tersimpan untuk mengganti nama objek, termasuk kolom.

Contoh

Berikut ini contoh untuk didemonstrasikan:

EXEC sp_rename 't1.c1', 'c11';

Ini mengganti nama kolom yang disebut c1 (dalam t1 tabel) ke c11 .

Termasuk Jenis Objek

Anda juga dapat menyertakan tipe objek sebagai argumen ketiga. Dalam hal ini, kita dapat menggunakan COLUMN :

EXEC sp_rename 'dbo.t1.c11', 'c1', 'COLUMN';

Termasuk Nama Skema

Anda juga dapat memenuhi syarat kolom pertama dengan nama skema, dalam hal ini, mungkin terlihat seperti ini:

EXEC sp_rename 'dbo.t1.c1', 'c11', 'COLUMN';

Dalam contoh ini, dbo adalah nama skema, tetapi Anda harus menggunakan skema apa pun yang berlaku.

Termasuk Nama Parameter

Seperti prosedur tersimpan lainnya, Anda juga dapat menyertakan nama parameter saat memanggil sp_rename :

EXEC sp_rename 
    @objname = 'dbo.t1.c1',
    @newname = 'c11',
    @objtype = 'COLUMN';

Periksa Referensi

Saat Anda mengganti nama kolom di SQL Server, Anda mungkin akan melihat pesan seperti ini:

Caution: Changing any part of an object name could break scripts and stored procedures.

Ini karena ketika Anda mengganti nama kolom, SQL Server tidak secara otomatis mengganti nama referensi ke kolom itu. Hal ini juga berlaku saat Anda mengganti nama tabel.

Terlepas dari pesan peringatan di atas, kolom tersebut tetap diganti namanya.

Jika kami mencoba mengkueri tampilan yang mereferensikan kolom yang diganti namanya, kami mendapatkan kesalahan.

SELECT * FROM vt1;

Hasil:

Msg 207, Level 16, State 1, Procedure vt1, Line 2
Invalid column name 'c1'.
Msg 4413, Level 16, State 1, Line 1
Could not use view or function 'vt1' because of binding errors.

Tampilan ini mencoba merujuk ke c1 tapi kolom itu telah diganti namanya, jadi tidak ada kolom dengan nama itu di tabel.

Definisi tampilan ini terlihat seperti ini:

CREATE VIEW vt1 AS
SELECT c1, c2 FROM dbo.t1;

Kami perlu memperbarui tampilan ini untuk merujuk nama kolom baru. Jadi kita bisa melakukan ini:

ALTER VIEW vt1 AS
SELECT c11, c2 FROM dbo.t1;

Sekarang menanyakan tampilan akan mengembalikan data yang benar.

Oleh karena itu, sebelum Anda mengganti nama kolom apa pun, Anda harus selalu memeriksa skrip dan prosedur tersimpan yang mereferensikan kolom tersebut. Anda perlu memperbarui skrip dan prosedur tersebut untuk mereferensikan nama kolom baru.

Anda dapat menggunakan sys.sql_expression_dependencies tampilan katalog sistem untuk melakukan pemeriksaan ini.

Mengganti Nama Kolom yang Dihitung

SQL Server tidak mengizinkan kami mengganti nama kolom yang dihitung.

Jika Anda mencoba mengganti nama kolom yang dihitung, Anda mungkin akan melihat pesan kesalahan berikut.

EXEC sp_rename 'dbo.t1.c3', 'c13', 'COLUMN';

Hasil:

Caution: Changing any part of an object name could break scripts and stored procedures.
Msg 4928, Level 16, State 1, Procedure sp_rename, Line 689
Cannot alter column 'c3' because it is 'COMPUTED'.

Dalam hal ini, c3 kolom adalah kolom yang dihitung yang melakukan perhitungan berdasarkan nilai dalam c2 kolom.

Inilah yang terjadi ketika kami mencoba mengganti nama c2 kolom.

EXEC sp_rename 'dbo.t1.c2', 'c12', 'COLUMN';

Hasil:

Msg 15336, Level 16, State 1, Procedure sp_rename, Line 563
Object 'dbo.t1.c2' cannot be renamed because the object participates in enforced dependencies.

Kami mendapatkan kesalahan yang berbeda untuk kolom ini. Kesalahan ini karena kolom yang dihitung bergantung pada kolom ini.

Pada dasarnya, untuk mengganti nama kolom yang dihitung, kita perlu menghapusnya dan menambahkannya lagi.

Contoh:

ALTER TABLE t1
DROP COLUMN c3;

ALTER TABLE t1
ADD c13 AS c2 * 10;

Kunci Asing

Mengganti nama kolom kunci utama tidak akan merusak kunci asing apa pun yang mereferensikan kolom itu.

Misalnya, sebelum saya mengganti nama t1.c1 ke t1.c11 , meskipun saya tidak menyebutkannya, saya sebenarnya memiliki tabel dan kolom lain (t2.c2 ) yang mereferensikan t1.c1 .

Setelah mengganti nama t1.c1 ke t1.c11 , batasan kunci asing pada t2.c2 masih menerapkan sisipan baru untuk mematuhi kunci asing, meskipun kolom kunci utama di tabel lain telah diubah namanya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tampilkan tanggal acara berikutnya

  2. Studi Kasus Peningkatan Perangkat Keras Server Database SQL Server

  3. Perbedaan antara Subquery dan Subquery Berkorelasi

  4. Cara Mengubah Tipe Data Kolom di SQL Server (T-SQL)

  5. 2 Cara Mendaftar Semua Fungsi Bernilai Tabel di Database SQL Server