0

Possible Duplicate:
One of the column between two columns should be NOT NULL. How to enforce it in schema?

I have a table with 5 null able fields and every record must have a value for one of those fields. Can I enforce user to enter value in minimum one of many nullable fields in SQL? Thanx

Community
  • 1
  • 1
FS-DBA
  • 41
  • 4

3 Answers3

5

Yes, you can, using a CHECK constraint;

CREATE TABLE test
(
  id INT,
  val1 VARCHAR(32),
  val2 VARCHAR(32),
  val3 VARCHAR(32),
  val4 VARCHAR(32),
  val5 VARCHAR(32),
  CHECK (COALESCE(val1,val2,val3,val4,val5) IS NOT NULL)
);

...will require at least one of val1-val5 to be NOT NULL.

Joachim Isaksson
  • 176,943
  • 25
  • 281
  • 294
4
ADD CONSTRAINT chkAnyNotNULL CHECK (col1 IS NOT NULL OR Col2 IS NOT NULL OR ....);
Hamlet Hakobyan
  • 32,965
  • 6
  • 52
  • 68
1

Yes. Using a CHECK CONSTRAINT;

USE tempdb
GO

IF OBJECT_ID('tempdb.dbo.MyTable') IS NOT NULL DROP TABLE MyTable

CREATE TABLE MyTable
(
    Col1    INT NULL,
    Col2    INT NULL,
    Col3    INT NULL,
    Col4    INT NULL,
    Col5    INT NULL,
    CONSTRAINT OneNonNull CHECK (COALESCE(Col1, Col2, Col3, Col4, Col5) IS NOT NULL)
)
GO

INSERT INTO MyTable
SELECT 1,2,3,4,5
GO

INSERT INTO MyTable
SELECT 1,NULL, NULL, NULL, NULL
GO

INSERT INTO MyTable
SELECT NULL, NULL, NULL, NULL, NULL
GO

SELECT *
FROM MyTable
MarkD
  • 5,276
  • 1
  • 14
  • 22