首先强制执行要检查的特定约束?

问题描述 投票:0回答:1

我有以下 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 错误,并且只有此错误。

我通过两种方式对此进行了测试:

  1. 尝试加载具有重复用户和作业的帐户表时,错误消息中会显示 UniqueJobPerAccount 错误,且仅显示此错误。

  2. 当使用 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
       )
     );
    
sql-server constraints declaration
1个回答
0
投票

我不相信你可以专门订购约束。老实说,如果插入到此表相对不常见,我会修改您的查询以在插入之前检查重复项,然后您可以根据发现的重复项返回自定义错误。当然,它需要 2 个查询而不是 1 个,但它可以实现您的目标。

    

© www.soinside.com 2019 - 2024. All rights reserved.