1

我有表调用' Users'并且在UserID那里。

我也有表调用 UsersFriends,看起来像:

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

如您所见,UserID并且FriendID是来自Users(UserID).

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

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.

有人可以帮助我吗?

谢谢。

4

1 回答 1

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

于 2014-05-09T12:09:02.563 回答