J'ai récemment ajouté deux champs à certaines tables de ma base de données (SQL Server 2005) pour permettre aux utilisateurs de personnaliser l'ordre de tri des lignes. J'ai suivi ce modèle pour toutes les tables:Définition d'un champ d'ordre de tri basé sur l'ordre alphabétique d'un autre champ
-- Alter the InvoiceStatus table
ALTER TABLE [dbo].[InvoiceStatus] ADD [Disabled] bit NOT NULL DEFAULT 0
GO
ALTER TABLE [dbo].[InvoiceStatus] ADD [SortOrder] int NOT NULL DEFAULT 0
GO
-- Use the primary key as the default sort order
UPDATE [dbo].[InvoiceStatus]
SET [SortOrder] = [InvoiceStatusId]
GO
Normalement, comme vous pouvez le voir, je l'ai utilisé la clé primaire comme l'ordre de tri par défaut. Maintenant, je suis cependant dans la situation que je voudrais utiliser l'ordre alphabétique d'un champ de texte dans la table comme l'ordre de tri par défaut. En utilisant le tableau ci-dessus comme un exemple (qui a un champ de texte [InvoiceStatusName]
), y a-t-il une requête simple et courte que je pourrais écrire pour utiliser l'ordre alphabétique de [InvoiceStatusName]
comme ordre de tri par défaut?
Mise à jour:
La question est déjà répondu, mais certains a fait remarquer que cette solution pourrait ne pas être idéal donc je veux juste ajouter un peu de contexte pour de futures références. C'est un vieux système (pas vieux-vieux, mais il a été autour pendant quelques années) en usage une poignée d'endroits différents.
Il existe plusieurs listes/menus déroulants dans l'application avec votre type « d'état » typique (comme d'état de la facture, état de la commande, type de client etc.). Au moment de la première écriture du système, ces valeurs étaient utilisées dans tous les endroits (pas de modification), mais certains utilisateurs ont commencé à demander la possibilité d'ajouter de nouveaux statuts, de supprimer ceux qui ne sont plus utilisés et de spécifier un ordre de tri (un statut peut être plus fréquemment utilisé, et il est donc agréable de l'avoir en haut de la liste). Le moyen le plus simple que j'ai trouvé pour faire cela (sans avoir à se tromper avec trop de l'ancien code) était d'ajouter deux nouveaux champs, Disabled
et SortOrder
, à toutes les tables pertinentes. Le champ Disabled
est utilisé pour "masquer" les types non utilisés (impossible de les supprimer en raison de l'intégrité référentielle et la valeur qu'ils contiennent doit également être conservée), et le champ SortOrder
est là pour que les utilisateurs puissent spécifier leur propre tri personnalisé. commande. Puisque toutes les tables pertinentes partagent également ces deux mêmes colonnes, il était très facile de créer une interface simple pour gérer le tri (et la désactivation) d'une manière générique.
+1 thx Martin. J'ai appris quelque chose de nouveau aujourd'hui. * btw, vous pouvez supprimer la colonne InvoiceStatusID. * –
Merci à Martin et Lieven. Vos deux suggestions sont bonnes, mais j'ai choisi Martin comme le accepté parce qu'il avait l'apparence la plus propre. – Nailuj