Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于检查其他列的SQL Server约束_Sql_Sql Server_Tsql - Fatal编程技术网

用于检查其他列的SQL Server约束

用于检查其他列的SQL Server约束,sql,sql-server,tsql,Sql,Sql Server,Tsql,产品:SQL Server 是否可以编写一个约束来检查其他列的值?在我的具体案例中,我将给您举一个例子: 假设我有一个5列的表: Name | Hobby1 | Hobby2 | Hobby3 | Hobby4 假设其中包含以下值: John Doe| fishing | reading| swimming| jogging 我试图达到以下目标: 如果有人试图插入:约翰·多伊、钓鱼、阅读 它应该被阻止,因为我不想在前3列中使用相同的组合 我能意识到这是一个约束吗?还是我需要前3列的主键组合

产品:SQL Server

是否可以编写一个约束来检查其他列的值?在我的具体案例中,我将给您举一个例子:

假设我有一个5列的表:

Name | Hobby1 | Hobby2 | Hobby3 | Hobby4
假设其中包含以下值:

John Doe| fishing | reading| swimming| jogging
我试图达到以下目标: 如果有人试图插入:约翰·多伊、钓鱼、阅读

它应该被阻止,因为我不想在前3列中使用相同的组合

我能意识到这是一个约束吗?还是我需要前3列的主键组合


感谢您的回复。

为表的前三列添加唯一约束

ALTER TABLE YourTableName
ADD CONSTRAINT UK_Name_Hobby1_Hobby2 UNIQUE (Name, Hobby1,Hobby2);

好吧,你可以按照@jarlh(在评论中)所说的去做,并确保爱好专栏是有序的,这将满足你的要求:

CREATE TABLE Hobbies
(
 Name VARCHAR(35) NOT NULL,
 Hobby1 VARCHAR(35) NOT NULL,
 Hobby2 VARCHAR(35) NOT NULL,
 Hobby3 VARCHAR(35),
 Hobby4 VARCHAR(35),
 CHECK ( Hobby1 < Hobby2 ),
 CHECK ( Hobby2 < Hobby3 ),
 CHECK ( Hobby3 < Hobby4 ),
 UNIQUE ( Name, Hobby1, Hobby2 ),
);

糟糕的桌子设计。有一个嗜好列,而不是几行。创建一个唯一的约束,其中三个列是唯一的,虽然你可以想出更好的设计。这只是为了简化问题,我的数据库中没有这样的表结构。谢谢你的回复!是的,包含前3列的主键可能正是您需要的约束。或者,如果其中一些是可空的,那么它应该是唯一的约束,加上仅在
name NOT NULL
上的PRIMARY。。。hobby5,即字母顺序。嗨,谢谢你的回复。如果我的第三列中有空值怎么办?我能否克服这一点:无名氏,钓鱼,空;John Doe,钓鱼,将接受NULL?唯一约束允许NULL一次
INSERT INTO Hobbies VALUES ( 'John Doe', 'fishing', 'jogging', 'reading', 'swimming' );
INSERT INTO Hobbies VALUES ( 'John Doe', 'jogging', 'reading', 'swimming', NULL );