1

我有一个包含多个列的表,其中定期插入数据。我想关注两个字段,如果在 A 列中输入一个值,则不应在 B 列中输入任何值。希望这是有道理的;我将在下面进行说明:

TABLE TEST
COLUMN a
COLUMN b
COLUMN c 
DATEADDED

INSERT INTO TEST(COLUMN A, COLUMN B)
VALUE('HELLO','HELLO')

这不应该被允许发生,而是应该在任何一个中都有一个空值。基本上是限制一个值在给定记录的任一列中的约束。

4

2 回答 2

3

请在http://www.w3schools.com/sql/sql_check.asp检查检查约束

在您的情况下,您可以执行以下操作:

CREATE TABLE Persons
(
    a VARCHAR(255) NULL,
    b VARCHAR(255) NULL,
    c VARCHAR(255) NULL,
    DATEADDED DATETIME DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT chk_AtLeastOneNull CHECK (A IS NULL OR B IS NULL)
)

如果你这样做,在插入中

insert into Persons(a,b,c) values ('a', 'b', null)

你会得到错误

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "chk_AtLeastOneNull". The conflict occurred in database "databasename", table "dbo.Persons".
The statement has been terminated.

您可以在检查中组合其他表达式,例如:

CONSTRAINT chk_AtLeastOneNull CHECK (A IS NULL OR (A IS NOT NULL AND B IS NULL))
于 2013-09-17T12:55:39.787 回答
0

我建议您查看检查约束

CHECK 约束通过限制一个或多个列接受的值来强制域完整性。您可以使用基于逻辑运算符返回 TRUE 或 FALSE 的任何逻辑(布尔)表达式创建 CHECK 约束。

您可以将多个 CHECK 约束应用于单个列。您还可以通过在表级别创建单个 >CHECK 约束来将其应用于多个列。

也看看SQL CHECK 约束

CHECK 约束用于限制可以放在列中的值范围。

如果您在单个列上定义 CHECK 约束,则它只允许该列的某些值。

如果您在表上定义 CHECK 约束,它可以根据行中其他列中的值来限制某些列中的值。

于 2013-09-17T12:52:50.470 回答