2013-10-03 13 views
6

Załóżmy, że istnieje tabela o nazwiedwóch kolumn nie może być null w tym samym czasie w sql

Pracownik

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

Teraz chcę umieścić ograniczenie takie, że zarówno adres i alternateAddress nie może być null tj możliwym przypadki są:

  • adres jest nieważna i alternateAddress nie jest null
  • alternateAddress jest null nd adres nie jest null
  • alternateAddress nie jest null i adres nie jest null

Ale nie może się zdarzyć, że każdy rekord w tabeli Employee wstawiony alternateAddress i zająć zarówno zerowy

+1

proszę określić RDBMS podczas zadawania takich pytań, np. MySQL, SQL-Server, Oracle, Postgres itp. – ChrisProsser

Odpowiedz

2

Utwórz ograniczenie tak:

(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

Tworzenie ograniczenie do stolika tak:

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

Użyłem skryptu sql podobnego do tego, co sugerowałeś i działa idealnie dobrze ALTER TABLE Pracownik ADD CONSTRAINT CK_OneAddress CHECK (NIE ((alternateAddress IS NULL) AND (address IS NULL))); –

+0

Nie ma problemu, jeśli chodzi o algebrę boolowską, twój skrypt jest równoważny mojej sugestii. Czy mógłbyś oznaczyć moją odpowiedź jako zaakceptowaną? Dziękuję Ci! –

Powiązane problemy