我是否可以强制用户在SQL中多个可为空的字段中至少输入一个值?

我是否可以强制用户在SQL中多个可为空的字段中至少输入一个值?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,可能重复: 我有一个包含5个可空字段的表,每个记录必须为其中一个字段指定一个值。 我是否可以强制用户在SQL中多个可为空的字段中至少输入一个值? Thanx是的,你可以使用 …将要求val1-val5中至少有一个不为空。是。使用检查约束 ADD CONSTRAINT chkAnyNotNULL CHECK (col1 IS NOT NULL OR Col2 IS NOT NULL OR ....); USE tempdb GO IF OBJECT_ID('tempdb.dbo.MyTabl

可能重复:

我有一个包含5个可空字段的表,每个记录必须为其中一个字段指定一个值。 我是否可以强制用户在SQL中多个可为空的字段中至少输入一个值? Thanx是的,你可以使用


…将要求val1-val5中至少有一个不为空。

是。使用
检查约束

ADD CONSTRAINT chkAnyNotNULL CHECK (col1 IS NOT NULL OR Col2 IS NOT NULL OR ....);
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

对表使用检查约束。向上投票!使用
COALESCE
是个好主意。似乎我被打败了:)
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