gpt4 book ai didi

sql-server - 在 SQL Server 中实现允许多个 NULL 值的唯一约束的正确方法

转载 作者:行者123 更新时间:2023-12-02 10:06:56 26 4
gpt4 key购买 nike


我需要表中的 1 列来保存唯一的非空值或 NULL。 TSQL UNIQUE 约束将 2 个 NULL 视为相等,因此我无法使列唯一。
处理这个问题的正确方法是什么?
经过一番研究,我发现了两种对我来说似乎正确的方法,但我无法确定哪一种更好。
第一个不适用于所有情况:

CREATE TABLE test (id INT NOT NULL IDENTITY(1,1) PRIMARY KEY, 
null_or_unique_id INT, unique_key AS
(CASE WHEN [null_or_unique_id] IS NULL THEN -(1)*[id]
ELSE [null_or_unique_id] END), UNIQUE(unique_key ));

它可以工作,但要求所有允许的 null_or_unique_id 值均为非负数(在我的情况下没问题)
第二个:

 CREATE VIEW test_view WITH SCHEMABINDING AS
SELECT [null_or_unique_id] FROM dbo.test WHERE [null_or_unique_id] IS NOT NULL;
GO
CREATE UNIQUE CLUSTERED INDEX byNullOrUniqueId
ON dbo.test_view([null_or_unique_id]);

当然,也可以使用触发器来实现所需的功能,但我认为触发器解决方案会比上述任何解决方案产生更多的开销。

这种情况的最佳实践是什么?
感谢您的回答。

最佳答案

4种方式:

  • Filtered index (SQL Server 2008) <- 根据您的标签推荐
  • 触发器(提及)
  • 索引 View (在您的问题中)
  • 带有计算列的唯一约束/索引(在您的问题中)

关于sql-server - 在 SQL Server 中实现允许多个 NULL 值的唯一约束的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088361/

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