Saya mencoba untuk melakukan hal ini:
ALTER TABLE CompanyTransactions DROP COLUMN Created
Tapi saya mendapatkan ini:
Msg 5074, Tingkat 16, Negara bagian 1, Baris 2 Objek 'DFCompanyTrCreat__0CDAE408' tergantung pada kolom 'Buat'. Msg 4922, Tingkat 16, Negara Bagian 9, Baris 2 ALTER TABLE DROP KOLOM Dibuat gagal karena satu atau lebih objek akses kolom ini.
Ini adalah kode pertama tabel. Entah bagaimana migrasi telah menjadi kacau dan saya mencoba untuk secara manual memutar kembali beberapa berubah.
Aku punya tidak ada tahu apa ini adalah:
DF__CompanyTr__Creat__0CDAE408
Anda harus menghapus kendala
dari kolom sebelum menghapus kolom. Nama yang anda referensi adalah default kendala
.
misalnya
alter table CompanyTransactions drop constraint [df__CompanyTr__Creat__0cdae408];
alter table CompanyTransactions drop column [Created];
Yang @SqlZim's jawaban yang benar tetapi hanya untuk menjelaskan mengapa ini bisa terjadi. I've punya masalah serupa dan ini disebabkan oleh sangat bersalah hal: menambahkan nilai default untuk kolom
ALTER TABLE MySchema.MyTable ADD
MyColumn int DEFAULT NULL;
Tapi di ranah MS SQL Server nilai default pada colum adalah KENDALA. Dan seperti setiap kendala ini memiliki identifier. Dan anda tidak bisa drop kolom jika digunakan dalam KENDALA.
Jadi apa yang dapat anda benar-benar melakukannya menghindari masalah seperti ini selalu memberikan default kendala a explicit nama, misalnya:
ALTER TABLE MySchema.MyTable ADD
MyColumn int NULL,
CONSTRAINT DF_MyTable_MyColumn DEFAULT NULL FOR MyColumn;
Anda'll masih harus drop constraint sebelum menjatuhkan kolom, tetapi anda akan setidaknya tahu nama depan.
Seperti yang sudah tertulis dalam jawaban yang anda butuhkan untuk menjatuhkan kendala (dibuat secara otomatis oleh sql) yang berkaitan dengan semua kolom yang anda mencoba untuk menghapus.
Melakukan hal-hal berikut ini langkah-langkah untuk melakukan hal yang diperlukan.
exec sp_helpconstraint '<meja anda nama>'
alter table <your_table_name> drop constraint <constraint_name_that_you_copied_in_1>
(It'akan menjadi sesuatu seperti ini atau hanya format yang sama)Alter table <YourTableName> Drop kolom column1, column2
dllAnda perlu melakukan beberapa hal:
-- 1. Menghapus kendala dan drop kolom JIKA EXISTS(SELECT * DARI INFORMATION_SCHEMA.KOLOM WHERE TABLE_NAME = N'TABLE_NAME' DAN COLUMN_NAME = N'LOWER_LIMIT') BEGIN MENYATAKAN @sql NVARCHAR(MAX) SEMENTARA 1=1 BEGIN PILIH TOP 1 @sql = N'alter table [TABLE_NAME] drop constraint ['+dc.nama+N']' DARI sys.default_constraints dc BERGABUNG sys.kolom c PADA c.default_object_id = dc.object_id Di MANA dc.parent_object_id = OBJECT_ID('[TABLE_NAME]') DAN c.nama = N'LOWER_LIMIT' JIKA @@ROWCOUNT = 0 BEGIN CETAK 'DIHAPUS Kendala pada kolom LOWER_LIMIT' ISTIRAHAT END EXEC (@sql) END; ALTER TABLE TABLE_NAME DROP KOLOM LOWER_LIMIT; CETAK 'DIHAPUS kolom LOWER_LIMIT' END LAIN CETAK 'Kolom LOWER_LIMIT tidak ada' PERGI
Ketika anda mengubah kolom datatype
yang anda butuhkan untuk mengubah kendala utama
untuk setiap database
alter table CompanyTransactions drop constraint [df__CompanyTr__Creat__0cdae408];