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

Sql server 检查约束-如何检查表中的相同参数?,sql-server,check-constraint,Sql Server,Check Constraint,我有表调用“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)那样的愤怒,

我有表调用“
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)那样的愤怒,因为他不能成为自己的朋友。 所以,我试着核对一下,但没有。。 我试着这样做:

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.
有人能帮我吗


谢谢。

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

create table UsersFriends
(   
UserID int references Users(UserID),
FriendID int references Users(UserID), 
primary key(UserID,FriendID),
CONSTRAINT CK_nested_friend check(UserID <> FriendID)
);
创建表用户朋友
(   
UserID int引用用户(UserID),
FriendID int引用用户(UserID),
主键(UserID、FriendID),
约束检查嵌套朋友检查(UserID-FriendID)
);

如果需要演示,请参见此处

我删除了mysql标记,因为语法仅为SQL Server,mysql不支持任何检查约束。谢谢@a_horse_with_no_nameHi@Rahul。我遇到错误:Msg 1767,级别16,状态0,第1行外键“FK__UsersFrie__UserI_u 5BE2A6F2”引用了无效的表“Users”。Msg 1750,级别16,状态0,第1行无法创建约束。请参阅前面的错误。@Zvi,您是否有一个名为
users
的表?如果是,则不应出现此错误。