Ajouter Ordre de sorting pour FOREIGN KEY CONSTRAINT sur SQL Server

Comment append l'ordre de sorting des foreign keys dans l'instruction suivante:

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

Je veux que le OrderID soit descendant.

Une contrainte de key étrangère garantit uniquement que les valeurs existent déjà dans la table référencée, et non dans l'ordre. Pour l'intégrité référentielle, la database ne se soucie pas de l'ordre des données.

La seule façon de garantir l'ordre dans un jeu de résultats consiste à utiliser une clause ORDER BY.

Avoir un ordre sur une key étrangère est un non-sens. Une key étrangère est un moyen d'imposer une règle selon laquelle la valeur du champ OrderId (dans votre exemple) doit exister dans une autre table. Cela n'a rien à voir avec le clustering de votre table (qui est le seul moyen d'imposer une command dans une table).

Incidemment, vous n'avez pas montré l'instruction complète car il y a une REFERENCES table(column) à la fin de votre instruction ADD CONSTRAINT.

Si vous voulez vraiment que datatables de votre table soient stockées dans l'ordre OrderID, vous devez append un index de clustering, tel que

 CREATE UNIQUE CLUSTERED INDEX CIX_Action_log ON Action_log (OrderID) GO 

Mais je dois remettre en question vos motivations pour le faire.

Une contrainte de key étrangère sur ActionLog.OrderID référençant Orders (OrderId) nécessitera que les colonnes référencées dans Orders forment une key unique, il faudra donc une sorte de contrainte ou d'index sur la table référencée avant de pouvoir appliquer la key étrangère contrainte en premier lieu. À ce stade, vous pouvez spécifier l'ordre d'index sur la table référencée . Une telle contrainte permet de passer efficacement d'ActionLog à Orders, et n'a généralement pas beaucoup d'importance pour accéder à ActionLog.

Si vous avez besoin de récupérer ActionLog par OrderID, vous devrez append vous-même un index.