如何让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
相关产品推荐
相关产品推荐

