我最近在我的数据库(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字段则允许用户指定自定义排序顺序。由于所有相关表格还共享这两个列,因此非常容易以通用方式处理排序(和禁用)的简单接口。