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

Microsoft SQL Server:如何实现非归档条码唯一,归档条码允许重复?

问题描述

需求:非归档(Archived=0)的Barcode在表中必须唯一,归档(Archived=1)的Barcode无需唯一。

表结构包含以下列:

  • ID int(数据库自动生成)
  • Barcode nvarchar(50)
  • Archived bit

之前尝试添加复合非聚集唯一约束,但该约束会限制归档条码只能存在一条,不符合需求:

ALTER TABLE [Parcels] ADD  CONSTRAINT [Barcode_Archived] UNIQUE 
NONCLUSTERED 
(
    [Barcode] ASC,
    [Archived] ASC
)

请问如何实现非归档条码强制唯一,同时允许归档条码重复?


解决方案

使用过滤式唯一非聚集索引,仅对未归档的行约束Barcode的唯一性,归档行不受限制。执行以下SQL语句:

CREATE UNIQUE NONCLUSTERED INDEX [IX_Parcels_Barcode_Unique_Unarchived]
ON [Parcels] ([Barcode])
WHERE ([Archived] = 0);

说明

  • 过滤索引通过WHERE子句限定生效范围,只针对Archived=0的行检查Barcode唯一性,完全匹配需求。
  • 对于Archived=1的归档行,该索引不会进行唯一性校验,因此可以存在重复的Barcode。
  • 这种方式比复合唯一约束更精准,避免了对归档行的不必要限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:18:18