我是否可以强制用户在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