Bagaimana cara menghapus kolom dari tabel yang ada?
Saya punya meja MEN
dengan Fname
danLname
Saya perlu menghapus Lname
Bagaimana cara melakukannya?
Bagaimana cara menghapus kolom dari tabel yang ada?
Saya punya meja MEN
dengan Fname
danLname
Saya perlu menghapus Lname
Bagaimana cara melakukannya?
Jawaban:
ALTER TABLE MEN DROP COLUMN Lname
Contoh Anda sederhana dan tidak memerlukan perubahan tabel tambahan tetapi secara umum ini tidak sepele.
Jika kolom ini direferensikan oleh tabel lain maka Anda perlu mencari tahu apa yang harus dilakukan dengan tabel / kolom lainnya. Salah satu opsi adalah menghapus kunci asing dan menyimpan data yang dirujuk di tabel lain.
Pilihan lain adalah menemukan semua kolom referensi dan menghapusnya juga jika tidak diperlukan lagi.
Dalam kasus seperti itu tantangan sebenarnya adalah menemukan semua kunci asing. Anda dapat melakukan ini dengan menanyakan tabel sistem atau menggunakan alat pihak ketiga seperti Pencarian ApexSQL (gratis) atau pelacak Ketergantungan Gerbang Merah (premium tetapi lebih banyak fitur). Ada seluruh utas pada kunci asing di sini
Ini jawaban yang benar:
ALTER TABLE MEN DROP COLUMN Lname
Tapi ... jika CONSTRAINT
ada pada COLUMN
, maka Anda harus DROP
yang CONSTRAINT
pertama, maka Anda akan dapat DROP
dengan COLUMN
. Untuk menjatuhkan CONSTRAINT
, jalankan:
ALTER TABLE MEN DROP CONSTRAINT {constraint_name_on_column_Lname}
constraint
untuk Kolom ?
Di SQL Server 2016 Anda bisa menggunakan pernyataan DIE baru.
ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name
Kueri di atas adalah menjalankan kembali drops
kolomnya hanya jika ituexists
dalam tabel yang lain itu tidak akan membuang kesalahan.
Alih-alih menggunakan IF
pembungkus besar untuk memeriksa keberadaan column
sebelum menjatuhkannya, Anda bisa menjalankan DDL
pernyataan di atas
Pertanyaannya adalah, bisakah Anda hanya menghapus kolom dari tabel yang tidak ada ;-)
BEGIN TRANSACTION
IF exists (SELECT * FROM sys.columns c
INNER JOIN sys.objects t ON (c.[object_id] = t.[object_id])
WHERE t.[object_id] = OBJECT_ID(N'[dbo].[MyTable]')
AND c.[name] = 'ColumnName')
BEGIN TRY
ALTER TABLE [dbo].[MyTable] DROP COLUMN ColumnName
END TRY
BEGIN CATCH
print 'FAILED!'
END CATCH
ELSE
BEGIN
SELECT ERROR_NUMBER() AS ErrorNumber;
print 'NO TABLE OR COLUMN FOUND !'
END
COMMIT
Jawaban sederhana untuk ini adalah menggunakan ini:
ALTER TABLE MEN DROP COLUMN Lname;
Lebih dari satu kolom dapat ditentukan seperti ini:
ALTER TABLE MEN DROP COLUMN Lname, secondcol, thirdcol;
Dari SQL Server 2016 juga dimungkinkan untuk hanya menjatuhkan kolom hanya jika ada. Ini menghentikan Anda mendapatkan kesalahan saat kolom tidak ada yang mungkin tidak Anda pedulikan.
ALTER TABLE MEN DROP COLUMN IF EXISTS Lname;
Ada beberapa prasyarat untuk menjatuhkan kolom. Kolom yang dijatuhkan tidak boleh:
Jika salah satu di atas benar, Anda harus menghentikan asosiasi tersebut terlebih dahulu.
Juga, harus dicatat, bahwa menjatuhkan kolom tidak merebut kembali ruang dari hard disk sampai indeks tabel berkerumun dibangun kembali. Karena itu, sering kali ide yang baik untuk mengikuti hal di atas dengan perintah tabel rebuild seperti ini:
ALTER TABLE MEN REBUILD;
Akhirnya karena beberapa orang mengatakan ini bisa lambat dan mungkin akan mengunci tabel selama durasi. Dimungkinkan untuk membuat tabel baru dengan struktur yang diinginkan dan kemudian mengganti nama seperti ini:
SELECT
Fname
-- Note LName the column not wanted is not selected
INTO
new_MEN
FROM
MEN;
EXEC sp_rename 'MEN', 'old_MEN';
EXEC sp_rename 'new_MEN', 'MEN';
DROP TABLE old_MEN;
Tapi berhati-hatilah ada jendela untuk kehilangan data dari baris yang disisipkan di sini antara perintah pilih pertama dan nama ganti terakhir.
Ini juga dapat dilakukan melalui GUI SSMS. Yang menyenangkan tentang metode ini adalah memperingatkan Anda jika ada hubungan pada kolom itu dan juga dapat secara otomatis menghapusnya juga.
Seperti yang saya katakan sebelumnya, jika ada hubungan yang juga perlu dihapus, ia akan menanyakan kepada Anda pada saat ini apakah Anda ingin menghapusnya juga. Anda mungkin perlu melakukannya untuk menghapus kolom.
Jika Anda menggunakan C # dan kolom Identity adalah int, buat instance baru int tanpa memberikan nilai apa pun padanya. Itu berhasil bagi saya.
[identity_column] = int baru ()
Sintaksis:
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;
Sebagai contoh:
alter table Employee drop column address;