Bagaimana cara menjatuhkan kolom yang memiliki kendala Default di SQL Server 2008?
Kueri saya adalah
alter table tbloffers
drop column checkin
Saya mendapatkan kesalahan di bawah ini
ALTER TABLE DROP COLUMN checkin gagal karena satu atau lebih objek mengakses kolom ini.
Adakah yang bisa memperbaiki kueri saya untuk menjatuhkan kolom dengan kendala?
sql-server
sql-server-2008
Robin Michael Poothurai
sumber
sumber
Jawaban:
Pertama, Anda harus menghapus yang bermasalah
DEFAULT constraint
, setelah itu Anda bisa menjatuhkan kolomTetapi kesalahan mungkin muncul dari alasan lain - misalnya fungsi yang ditentukan pengguna atau tampilan dengan
SCHEMABINDING
opsi yang ditetapkan untuk mereka.UPD: Script kendala menjatuhkan yang sepenuhnya otomatis:
sumber
Berikut cara lain untuk menjatuhkan batasan default dengan nama yang tidak dikenal tanpa harus terlebih dahulu menjalankan kueri terpisah untuk mendapatkan nama kendala:
sumber
Anda juga dapat menjatuhkan kolom dan batasannya dalam satu pernyataan, bukan satu per satu.
Beberapa SQL dinamis yang akan mencari nama-nama kendala pemeriksaan dependen dan kendala default dan letakkan bersama kolom di bawah ini
(tetapi tidak dependensi kolom lain yang mungkin seperti kunci asing, batasan kunci primer dan unik, kolom yang dihitung, indeks)
sumber
DROP CONSTRAINT
melihat tata bahasa Jika Anda tidak menyebutkan kendala secara eksplisit maka Anda harus mencari nama SQL Server yang dihasilkan untuk itu misalnya sesuai jawaban marc. Tetapi setelah mengetahui hal itu, Anda masih bisa menghilangkan kendala dan kolom pada saat yang sama.Temukan batasan default dengan kueri ini di sini:
Ini memberi Anda nama batasan default, serta nama tabel dan kolom.
Ketika Anda memiliki informasi itu, Anda harus terlebih dahulu menjatuhkan batasan default:
dan kemudian Anda bisa menjatuhkan kolom
sumber
ALTER TABLE table DROP CONSTRAINT DF_XY DROP COLUMN XY
Sayangnya sintaks dari pernyataan ini tidak benarDROP
perintah untuk membuat pekerjaan iniBerikut ini bekerja untuk saya terhadap backend SQL Azure (menggunakan SQL Server Management Studio), jadi YMMV, tetapi, jika bekerja untuk Anda, itu waaaaay lebih sederhana daripada solusi lainnya.
sumber
Saya mendapat hal yang sama:
ALTER TABLE DROP COLUMN gagal karena satu atau lebih objek mengakses pesan kolom ini .
Kolom saya memiliki indeks yang perlu dihapus terlebih dahulu. Menggunakan sys.indexes berhasil:
sumber
Saya telah memperbarui skrip sedikit ke versi SQL server saya
sumber
Ini tidak selalu hanya kendala default yang mencegah dari menjatuhkan kolom dan kadang-kadang indeks juga dapat memblokir Anda dari menjatuhkan kendala. Jadi saya menulis prosedur yang menjatuhkan indeks atau batasan pada kolom dan kolom itu sendiri di akhir.
sumber