You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SQL Server优先检查指定的唯一约束?

SQL Server唯一约束触发顺序问题

我创建了如下SQL Server表:

create table Account(
    -- 列名及其数据类型和属性
    Id int not null identity primary key,
    User varchar(50) not null,
    Job varchar(200) not null,
    
    -- 表约束
    constraint UniqueUserPerAccount unique (User),
    constraint UniqueJobPerAccount unique (Job),
)

我把更重要的UniqueUserPerAccount约束放在定义的前面,原本期望当两个约束同时被违反时,能优先触发并提示这个约束的错误。但实际SQL Server会按列名的字母顺序处理约束,导致同时违反两个约束时,只会显示UniqueJobPerAccount的错误。

我通过两种方式验证了这个现象:

  • 向Account表插入重复的User和Job值时,错误消息仅提示UniqueJobPerAccount约束被违反。
  • 在SQL Server Management Studio中右键该表,选择“编写表脚本为”->“CREATE到”生成的脚本里,约束按列名字母顺序排列,而非我最初定义的顺序:
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
  )
);

内容的提问来源于stack exchange,提问作者Tyler Furman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:20:03