【问题标题】:SQL Server 2005 Unique constraint on two columnsSQL Server 2005 对两列的唯一约束
【发布时间】:2011-01-11 22:56:04
【问题描述】:

如何在 SQL Server 2005 中将唯一约束添加到两列?所以可以说我有:

PK, A, B ...
x1  1  1
x2  1  2
x3  2  1
x4  2  2

我应该无法添加另一行“x5”并且 A 和 B 的值为 1,1,因为它们已经在 x1 的数据库中?

好的,我们设法让它工作,感谢 OMG。转到表格视图,选择两列,右键单击并选择“索引/键” - 常规选项卡,选择您想要唯一的列,然后将“唯一”设置为 true。这是使用表格设计器。

谢谢。

【问题讨论】:

标签: sql sql-server sql-server-2005


【解决方案1】:
ALTER TABLE YourTable
ADD CONSTRAINT UQ_YourTable_ConstraintName UNIQUE(A, B)

【讨论】:

  • 约束框中的语法是什么。我们突出显示这两列,右键单击'约束'并输入'UNIQUE(DocType,PubID)',它说有一个错误 - '错误验证约束'
  • 甚至比进入表设计器更容易/更快 - 只需在 SSMS 中打开一个新的查询选项卡并运行 SQL。
  • +1 - 获胜的唯一约束,它比唯一索引更能告诉未来进入系统的人。
  • 我记住了这一切,我需要阅读更多的 msdn,时间是个问题 :)
  • @Abel - 当然,但这对下一个进入系统的 DBA 意味着什么?约束意味着数据模型中的某些内容很重要,而索引则意味着性能是主要关注点。
【解决方案2】:

在 SQL Server 中,唯一约束实际上是作为唯一索引实现的。使用:

CREATE UNIQUE INDEX <uix_name> ON <table_name>(<col_A>, <col_B>)

有关详细信息,请参阅this MSDN page

【讨论】:

  • 是的,我们通过表格设计器进行了管理,它很有效。
  • 我同意@adaTheDev 并添加表约束而不是添加唯一索引“原始”。创建索引意味着可能的性能改进。但是在意识到它的存在不是为了性能而是为了功能之前,人们可能会放弃这个索引。你永远不会在没有意识到大多数都在服务于某些功能目的的情况下放弃约束。 (不可否认,唯一约束创建唯一索引端但不能直接删除,只能通过删除约束)
  • @Ralph Shillington:唯一索引也可以包含 INCLUDE 列。一个约束不能。欲了解更多信息:stackoverflow.com/questions/2152176/…
  • 你说得对。然而,我倾向于认为这是一个奇怪的事情。 INCLUDE 是为了性能,随着系统的发展,它可能需要“tweeking”,即。今天包含的列可能对明天的工作量没有价值。但是,我认为可以合理地说 UNIQUEness 是对数据的约束,它与给定的工作负载或系统使用无关,而是与应用程序功能相关。这是一个不幸的,也许很少见的情况,需要混合和匹配。
  • 如果您禁用索引,请注意,它会禁用索引为表提供的唯一约束。这一天让我们很头疼……
猜你喜欢
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多