2010-05-28 68 views
18

Khi bạn tạo ràng buộc khóa ngoài trong bảng và bạn tạo tập lệnh trong MS SQL Management Studio, có vẻ như thế này.Ràng buộc kiểm tra khóa ngoài T-SQL

ALTER TABLE T1 WITH CHECK ADD CONSTRAINT FK_T1 FOREIGN KEY(project_id) 
REFERENCES T2 (project_id) 
GO 
ALTER TABLE T1 CHECK CONSTRAINT FK_T1 
GO 

Điều tôi không hiểu là mục đích thứ hai thay đổi với ràng buộc kiểm tra là gì. Không tạo ra ràng buộc FK đủ? Bạn có phải thêm ràng buộc kiểm tra để đảm bảo tính toàn vẹn tham chiếu không?

Một câu hỏi khác: câu hỏi sẽ trông như thế nào khi bạn muốn viết trực tiếp trong định nghĩa cột?

CREATE TABLE T1 (
my_column INT NOT NULL CONSTRAINT FK_T1 REFERENCES T2(my_column) 
) 

Không đủ sao?

Trả lời

8

Đầu tiên nó tạo ra ràng buộc và ở đây bạn có thể xác định liệu dữ liệu allready trong bảng có nên được kiểm tra hay không với ràng buộc mới của bạn. WITH { CHECK | NOCHECK }

Phần thứ hai chỉ định rằng ràng buộc được bật. ALTER TABLE TableName { CHECK | NOCHECK } CONSTRAINT ConstraintName

+5

ok .. và nó sẽ không được kích hoạt theo mặc định? Bởi vì trong quan điểm của tôi .. nếu tôi viết một ràng buộc khi tạo một bảng, nó sẽ được kích hoạt theo mặc định. –

+0

Tôi muốn nhận được câu trả lời cho câu hỏi thứ hai của bạn, tất cả tài liệu tôi đọc nói rằng ràng buộc fk sẽ thực thi quy tắc trong các cột hiện tại theo mặc định, vì vậy tôi tin rằng câu lệnh thứ hai là không cần thiết. – Ernesto

3

Câu lệnh thứ hai được bắt buộc bằng "WITH CHECK" trong câu lệnh đầu tiên. Có một cài đặt bạn có thể chuyển đổi để không thực hiện việc này.

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