2013-10-03 17 views
6

Giả sử có một bảng gọi làHai cột không thể được null cùng một lúc trong sql

nhân viên

ID number, name varchar(24 char), address varchar2(100 char), alternateAddress(100 char), sex varchar2(10 char) 

Bây giờ tôi muốn đặt hạn chế như vậy mà cả hai địa chỉ và alternateAddress không thể được null tức là thể trường hợp là:

  • địa chỉ là null và alternateAddress không phải là null
  • alternateAddress là null một nd địa chỉ không phải là null
  • alternateAddress không phải là null và địa chỉ không phải là null

Nhưng không thể xảy ra rằng bất kỳ kỷ lục trong bảng Employee chèn với alternateAddress và giải quyết cả hai vô

+1

vui lòng chỉ định RDBMS khi đặt câu hỏi như thế này, v.d. MySQL, SQL-Server, Oracle, Postgres, v.v. – ChrisProsser

Trả lời

2

Tạo hạn chế của bạn như thế này:

(address is null and alternateAddress is not null) or 
(alternateAddress is null and address is not null) or 
(alternateAddress is not null and address is not null) 
6

Tạo một ràng buộc tới bảng của bạn như thế này:

ALTER TABLE [dbo].[Employee] WITH CHECK ADD CONSTRAINT [CK_OneAddress] CHECK ((NOT [address] IS NULL) OR (NOT [alternateAddress] IS NULL)) 
GO 

ALTER TABLE [dbo].[Employee] CHECK CONSTRAINT [CK_OneAddress] 
GO 
+0

Tôi sử dụng kịch bản sql dưới đây tương tự như những gì bạn đã gợi ý và nó hoạt động hoàn toàn tốt ALTER TABLE Employee ADD CONSTRAINT CK_OneAddress CHECK (NOT ((alternateAddress IS NULL) AND (địa chỉ IS NULL))); –

+0

Không có vấn đề, liên quan đến đại số boolean kịch bản của bạn tương đương với đề xuất của tôi. Bạn vui lòng đánh dấu câu trả lời của tôi là được chấp nhận không? Cảm ơn bạn! –

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