我有表格“Users
”并且UserID
就在那里。
我还有表调用的用户朋友:
create table UsersFriends
(
UserID int references Users(UserID),
FriendID int references Users(UserID),
primary key(UserID,FriendID)
)
如您所见,UserID
和FriendID
是来自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.
有人可以帮我吗?
感谢。
答案 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