gpt4 book ai didi

sql - 条件唯一约束

转载 作者:行者123 更新时间:2023-12-01 16:59:25 26 4
gpt4 key购买 nike

我遇到一种情况,我需要对一组列强制执行唯一约束,但仅限于列的一个值。

例如,我有一个像 Table(ID, Name, RecordStatus) 这样的表。

RecordStatus 只能有值 1 或 2(事件或删除),并且我想仅当 RecordStatus = 1 时对 (ID, RecordStatus) 创建唯一约束,因为我不关心是否有多个已删除记录具有相同的 ID。

除了编写触发器之外,我还可以这样做吗?

我使用的是 SQL Server 2005。

最佳答案

看哪,the filtered index 。来自文档(强调我的):

A filtered index is an optimized nonclustered index especially suited to cover queries that select from a well-defined subset of data. It uses a filter predicate to index a portion of rows in the table. A well-designed filtered index can improve query performance as well as reduce index maintenance and storage costs compared with full-table indexes.

这是一个将唯一索引与过滤谓词相结合的示例:

create <b>unique</b> index MyIndex
on MyTable(ID)
<b>where RecordStatus = 1;</b>

RecordStatus1 时,这实质上会强制执行 ID 的唯一性。

创建该索引后,唯一性违规将引发错误:

Msg 2601, Level 14, State 1, Line 13
Cannot insert duplicate key row in object 'dbo.MyTable' with unique index 'MyIndex'. The duplicate key value is (9999).

注意:过滤索引是在 SQL Server 2008 中引入的。对于早期版本的 SQL Server,请参阅 this answer .

关于sql - 条件唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/866061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com