Sql server “中每个用户标识约束的唯一名称”;选中“约束表达式”;窗口

Sql server “中每个用户标识约束的唯一名称”;选中“约束表达式”;窗口,sql-server,unique-constraint,Sql Server,Unique Constraint,我正在尝试为每个用户id设置唯一的名称 表:设置 Cols:ID、名称、值、用户ID 第1行:1,“数据库”,“商店”,1 第2行:2,'DBLogin','admin',1 第3行:3,'DBPass','hash',1 行4:4,‘数据库’、‘lol’、2——这没关系 第5行:5,“数据库”,“商店”,3--这没关系 第6行:6,'数据库','lol',3--这应该被拒绝 在MSSQLServerMS的“checkconstraintexpression”窗口中,我尝试了这样的示例 Nam

我正在尝试为每个用户id设置唯一的名称

表:设置
Cols:ID、名称、值、用户ID
第1行:1,“数据库”,“商店”,1
第2行:2,'DBLogin','admin',1
第3行:3,'DBPass','hash',1
行4:4,‘数据库’、‘lol’、2——这没关系
第5行:5,“数据库”,“商店”,3--这没关系
第6行:6,'数据库','lol',3--这应该被拒绝
在MSSQLServerMS的“checkconstraintexpression”窗口中,我尝试了这样的示例

Name不在(选择UserID=3的名称)
但即使这样也会导致错误“在此上下文中不允许子查询。只允许标量表达式。在“')附近的语法不正确”
有没有办法实现我的目标
顺便问一句,有没有一个微软的甲骨文:NEW.field的等价物?这将有助于:

Name不在(选择UserID=:NEW.UserID所在的名称)
…但它仍然是一个子查询

主要目标是为每个用户创建一个设置字典(C#)

只需在其上创建一个唯一的约束即可

CREATE UNIQUE INDEX uk_settings_userid_name ON Settings (UserID, Name);

只需在其上创建一个唯一的约束

CREATE UNIQUE INDEX uk_settings_userid_name ON Settings (UserID, Name);

您可以通过使用
约束
唯一索引
来实现这一点,其中一个就足够了

约束条件:

ALTER TABLE Settings 
ADD CONSTRAINT UQSettings UNIQUE(Name, [Value])
唯一索引:

CREATE UNIQUE INDEX UQSettings ON Settings(Name, [Value])

您可以通过使用
约束
唯一索引
来实现这一点,其中一个就足够了

约束条件:

ALTER TABLE Settings 
ADD CONSTRAINT UQSettings UNIQUE(Name, [Value])
唯一索引:

CREATE UNIQUE INDEX UQSettings ON Settings(Name, [Value])

但这将限制“theName”在表中只插入一次应该可以为不同的UserID复制“Name”,然后使约束覆盖两列,例如on(UserID,Name)。请看@DamianK。对不起,我没有那个角色。已更新。但这将限制“theName”在表中仅插入一次应该可以为不同的UserID复制“Name”,然后使约束覆盖两列,例如on(UserID,Name)。请看@DamianK。对不起,我没有那个角色。更新。