检查约束 - 如何检查表中的相同参数?

时间:2014-05-09 11:54:11

标签: sql-server check-constraint

我有表格“Users”并且UserID就在那里。

我还有表调用的用户朋友:

create table UsersFriends
(   
UserID int references Users(UserID),
FriendID int references Users(UserID), 
primary key(UserID,FriendID)
)

如您所见,UserIDFriendID是来自Users(UserID).的引用

我想确保没有像以下那样的恩赐:(1,1)因为不能成为他自己的朋友。 所以,我试图做检查,但不是.. 我试着这样做:

create table UsersFriends
(   
User1ID int references Users(UserID),
FriendID int references Users(UserID) CHECK (FriendID in (select u.UserID from Users u where      
u.UserID!= User1ID)),
primary key(User1ID,FriendID)
)

但我有错误:

Msg 1046, Level 15, State 1, Line 4
Subqueries are not allowed in this context. Only scalar expressions are allowed.

有人可以帮我吗?

感谢。

1 个答案:

答案 0 :(得分:2)

您正在内联定义check约束,而且不允许使用子查询。您需要在表级别定义约束,如下所示

create table UsersFriends
(   
UserID int references Users(UserID),
FriendID int references Users(UserID), 
primary key(UserID,FriendID),
CONSTRAINT CK_nested_friend check(UserID <> FriendID)
);

如果需要演示,请参阅此处http://sqlfiddle.com/#!3/1e405