2017-04-21 18 views
13

Tôi cố gắng để làm điều này:ALTER TABLE DROP COLUMN thất bại vì một hoặc nhiều đối tượng truy cập vào cột này

ALTER TABLE CompanyTransactions DROP COLUMN Created 

Nhưng tôi có được điều này:

Msg 5074, Level 16, State 1, Dòng 2 Đối tượng 'DF__CompanyTr__Creat__0CDAE408' phụ thuộc vào cột 'Đã tạo'. Msg 4922, Cấp 16, Tiểu bang 9, Dòng 2 ALTER TABLE DROP COLUMN Đã tạo không thành công do một hoặc nhiều đối tượng truy cập cột này.

Đây là bảng đầu tiên. Bằng cách nào đó việc di chuyển đã trở thành tất cả điều sai lầm và tôi đang cố gắng tự quay trở lại một số thay đổi.

Tôi có không biết đây là những gì:

DF__CompanyTr__Creat__0CDAE408 

Trả lời

24

Bạn phải loại bỏ các constraints từ cột trước khi tháo cột. Tên bạn đang tham chiếu là default constraint.

ví dụ:

alter table CompanyTransactions drop constraint [df__CompanyTr__Creat__0cdae408]; 
alter table CompanyTransactions drop column [Created]; 
+5

Thật khó chịu khi Khung thực thể không quan tâm đến điều này đối với chúng tôi. – chakeda

+0

@chakeda Tôi đồng ý – SqlZim

2

Câu trả lời của @ SqlZim là chính xác nhưng chỉ giải thích tại sao điều này có thể xảy ra. Tôi đã có vấn đề tương tự và điều này là do điều vô tội: thêm giá trị mặc định vào một cột

ALTER TABLE MySchema.MyTable ADD 
    MyColumn int DEFAULT NULL; 

Nhưng trong lĩnh vực MS SQL Server giá trị mặc định trên cột là một CONSTRAINT. Và giống như mọi ràng buộc, nó có một định danh. Và bạn không thể thả một cột nếu nó được sử dụng trong một CONSTRAINT.

Vì vậy, những gì bạn thực sự có thể làm tránh những loại vấn đề luôn được cung cấp cho những hạn chế mặc định của bạn một tên rõ ràng , ví dụ:

ALTER TABLE MySchema.MyTable ADD 
    MyColumn int NULL, 
    CONSTRAINT DF_MyTable_MyColumn DEFAULT NULL FOR MyColumn; 

Bạn vẫn sẽ phải thả các hạn chế trước khi thả các cột , nhưng bạn sẽ ít nhất là biết tên của nó lên phía trước.

Các vấn đề liên quan