2008-09-18 35 views
157

Tôi đã tạo ra một chìa khóa nước ngoài (trong SQL Server) theo:Làm cách nào để thả khóa ngoại trong SQL Server?

alter table company add CountryID varchar(3); 
alter table company add constraint Company_CountryID_FK foreign key(CountryID) 
references Country; 

sau đó tôi chạy truy vấn này:

alter table company drop column CountryID; 

và tôi nhận được lỗi này:

Msg 5074, Level 16, State 4, Line 2
The object 'Company_CountryID_FK' is dependent on column 'CountryID'.
Msg 4922, Level 16, State 9, Line 2
ALTER TABLE DROP COLUMN CountryID failed because one or more objects access this column

Tôi có đã cố gắng điều này, nhưng nó dường như không hoạt động:

alter table company drop foreign key Company_CountryID_FK; 
alter table company drop column CountryID; 

Tôi cần làm gì để thả cột CountryID?

Cảm ơn.

+2

Bạn đang cố gắng loại bỏ khóa ngoại nào? – ddc0660

+0

Chỉ cần lưu ý rằng việc thả một ràng buộc khoá ngoại là nguy hiểm mà không biết tại sao nó lại có vị trí đầu tiên. Nếu bạn vừa tạo điều này và đã làm điều đó do nhầm lẫn thì hãy sử dụng mã được cung cấp trong các câu trả lời khác. Nếu không, sau đó không thả các ràng buộc cho đến khi bạn chắc chắn rằng bạn sẽ không phá vỡ cái gì khác bằng cách làm như vậy. Các ràng buộc được tạo ra để thực thi các quy tắc busness và tốt hơn là chắc chắn chúng không còn cần trước khi thả chúng. – HLGEM

+0

http://www.w3schools.com/sql/sql_foreignkey.asp – xameeramir

Trả lời

243

Hãy thử

alter table company drop constraint Company_CountryID_FK 


alter table company drop column CountryID 
4

Tôi không biết MSSQL nhưng nó sẽ không được:

alter table company drop **constraint** Company_CountryID_FK; 
10
alter table company drop constraint Company_CountryID_FK 
44

này sẽ làm việc:

ALTER TABLE [dbo].[company] DROP CONSTRAINT [Company_CountryID_FK] 
1

Bạn cũng có thể Right Click trên bảng, chọn sửa đổi, sau đó chuyển đến thuộc tính, nhấp chuột phải vào thuộc tính và choo se thả khóa chính.

1

Bạn đang cố gắng loại bỏ ràng buộc FK hoặc chính cột đó?

Để thả các hạn chế:

alter table company drop constraint Company_CountryID_FK 

Bạn sẽ không thể để thả các cột cho đến khi bạn thả các hạn chế.

15

Tôi nghĩ rằng điều này sẽ hữu ích cho bạn ...

DECLARE @ConstraintName nvarchar(200) 
SELECT 
    @ConstraintName = KCU.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC 
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KCU 
    ON KCU.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG 
    AND KCU.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA 
    AND KCU.CONSTRAINT_NAME = RC.CONSTRAINT_NAME 
WHERE 
    KCU.TABLE_NAME = 'TABLE_NAME' AND 
    KCU.COLUMN_NAME = 'TABLE_COLUMN_NAME' 
IF @ConstraintName IS NOT NULL EXEC('alter table TABLE_NAME drop CONSTRAINT ' + @ConstraintName) 

Nó sẽ xóa ràng buộc khoá ngoại dựa trên bảng và cột cụ thể.

+1

Cảm ơn Samir. Đại khái quát. – kuklei

13

Kiểm tra đầu tiên về sự tồn tại của ràng buộc rồi thả nó.

if exists (select 1 from sys.objects where name = 'Company_CountryID_FK' and type='F') 
begin 
alter table company drop constraint Company_CountryID_FK 
end 
Các vấn đề liên quan