Недавно я добавил пару полей в некоторые таблицы в моей базе данных (SQL Server 2005), чтобы пользователи могли настраивать порядок сортировки строк. Я следовал этому шаблону для всех таблиц:
-- 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
Обычно, как вы можете видеть, я использовал первичный ключ в качестве порядка сортировки по умолчанию. Однако сейчас я нахожусь в ситуации, когда я хотел бы использовать алфавитный порядок текстового поля в таблице в качестве порядка сортировки по умолчанию.
Используя приведенную выше таблицу в качестве примера (в которой есть текстовое поле [InvoiceStatusName]
), можно ли написать такой же приятный и короткий запрос, чтобы использовать алфавитный порядок [InvoiceStatusName]
в качестве порядка сортировки по умолчанию?
Обновление:
На этот вопрос уже дан ответ, но некоторые отметили, что это решение может быть не идеальным, поэтому я просто хочу добавить некоторый контекст для будущих ссылок. Это старая система (не старая, но уже несколько лет), используемая в нескольких разных местах.
В приложении имеется несколько списков / раскрывающихся списков с типичным типом «статуса» (например, статус счета , статус заказа , тип клиента так далее.). Назад, когда система была впервые написана, это были стандартные значения, используемые везде (не предназначенные для изменения каким-либо образом), но некоторые пользователи начали запрашивать возможность добавлять новые статусы, удалять те, которые больше не используются, и указывать пользовательские порядок сортировки (один статус может использоваться чаще, и поэтому желательно иметь его в верхней части списка).
Самым простым способом, который я нашел для этого (без необходимости слишком много возиться со старым кодом), было добавление двух новых полей, Disabled
и SortOrder
, для всех соответствующих таблиц. Поле Disabled
используется для «скрытия» неиспользуемых типов (не может удалить их из-за ссылочной целостности, и значение, которое они содержат, также необходимо сохранить), а поле SortOrder
там, чтобы пользователи могли указать свой собственный порядок сортировки. Поскольку все соответствующие таблицы также совместно используют эти два столбца, было очень легко создать простой интерфейс для обработки сортировки (и отключения) общим способом.