"Check Constraint Expression" window 中每个 UserID 约束的唯一名称

Unique Name for each UserID constraint in "Check Constraint Expression" window

我试图让我的设置名称对于每个用户 ID 都是唯一的

Table: Settings
Cols: ID, Name, Value, UserID
Row1: 1, 'Database', 'shop',  1
Row2: 2, 'DBLogin' , 'admin', 1
Row3: 3, 'DBPass'  , 'hash',  1
Row4: 4, 'Database', 'lol',   2 --this is ok
Row5: 5, 'Database', 'shop',  3 --this is ok
Row6: 6, 'Database', 'lol',   3 --this shoud be rejected

在 "Check Constraint Expression" window of MS SQL Server MS, table creation I've tried such example

Name NOT IN (SELECT Name WHERE UserID = 3)

但即使这样也会导致错误 "Subqueries are not allowed in this context. Only scalar expressions are allowed. Incorrect syntax near ')'"
有没有办法实现我的目标?
顺便提一句。是否有 MS 的等同于 Oracle 的 :NEW.field?这会很有用:

Name NOT IN (SELECT Name WHERE UserID = :NEW.UserID)

...但它仍然是一个子查询
主要目标是为每个用户创建一个设置字典(C#)

只需对其创建唯一约束。

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

您可以使用 CONSTRAINTUnique Index 中的一个就足够了。

约束:

ALTER TABLE Settings 
ADD CONSTRAINT UQSettings UNIQUE(Name, [Value])

唯一索引:

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