我有以下 SQL Server 表:
create table Account(
-- column names with their data types and properties
Id int not null identity primary key,
User varchar(50) not null,
Job varchar(200) not null,
-- table limitations
constraint UniqueUserPerAccount unique (User),
constraint UniqueJobPerAccount unique (Job),
)
对于这两个约束,我首先列出了更重要的约束,希望如果两个约束都被违反,第一个约束将被触发并显示给用户。但是,约束似乎是按列名称的字母顺序声明的,因此如果两个约束都失败,则将违反 UniqueJobPerAccount 错误,并且只有此错误。
我通过两种方式对此进行了测试:
尝试加载具有重复用户和作业的帐户表时,错误消息中会显示 UniqueJobPerAccount 错误,且仅显示此错误。
当使用 SQL Server 管理并右键单击帐户表以“将表脚本编写为”->“创建到”时,它会按列的字母顺序提供约束,如下所示,而不是像我在--上面的表限制:
CREATE TABLE [dbo].[Account]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[User] [varchar](50) NOT NULL,
[Job] [varchar](200) NOT NULL,
PRIMARY KEY CLUSTERED
(
[Id] ASC
),
CONSTRAINT [UniqueJobPerAccount] UNIQUE NONCLUSTERED
(
[Job] ASC
),
CONSTRAINT [UniqueUserPerAccount] UNIQUE NONCLUSTERED
(
[User] ASC
)
);
我不相信你可以专门订购约束。老实说,如果插入到此表相对不常见,我会修改您的查询以在插入之前检查重复项,然后您可以根据发现的重复项返回自定义错误。当然,它需要 2 个查询而不是 1 个,但它可以实现您的目标。