在SQL Server上为FOREIGN KEY CONSTRAINT添加排序顺序

时间:2010-07-08 22:05:50

标签: sql sql-server foreign-keys

如何在以下语句中添加外键排序顺序:

ALTER TABLE [dbo].[ActionLog] 
 WITH CHECK ADD CONSTRAINT [FK_ActionLog_Order] FOREIGN KEY([OrderID])

我希望OrderID降序。

3 个答案:

答案 0 :(得分:4)

外键约束仅确保引用的表中已存在值,而不是顺序。对于参照完整性,数据库不关心数据的顺序。

确保结果集中的顺序的唯一方法是使用ORDER BY子句。

答案 1 :(得分:2)

订购外键是无稽之谈。外键是一种强制规则的方法,OrderId字段(在您的示例中)中的值必须存在于另一个表中。它与表的聚类无关(这是在表中强制执行订单的唯一方法)。

顺便说一下,你没有显示完整的陈述,因为在你的ADD CONSTRAINT语句的末尾shuold是REFERENCES table(column)

如果您确实希望表中的数据以OrderID顺序存储,那么您需要添加一个聚类索引,例如

CREATE UNIQUE CLUSTERED INDEX CIX_Action_log
   ON Action_log (OrderID)
GO

但我必须质疑你这样做的动机。

答案 2 :(得分:0)

引用Orders(OrderId)的ActionLog.OrderID上的外键约束将要求Orders中引用的列确实形成唯一键,因此需要在引用的表<上存在某种约束或索引/ strong>之前可以首先应用外键约束。此时,您可以在引用的表上指定索引顺序。这样的约束是为了有效地从ActionLog到Orders,并且在访问ActionLog时通常没有任何/很多说法。

如果您需要通过OrderID提取ActionLog,则必须自己添加索引。