根据另一个字段的字母顺序设置排序顺序字段

Jul*_*ian 5 sql sql-server sql-server-2005

我最近在我的数据库(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
Run Code Online (Sandbox Code Playgroud)

通常,正如您所看到的,我使用主键作为默认排序顺序.然而,我现在处于这样的情况:我想使用表中文本字段的字母顺序作为默认排序顺序.

使用上面的表作为一个例子(有一个文本字段[InvoiceStatusName]),是否有一个类似的好的和简短的查询我可以编写使用字母顺序[InvoiceStatusName]作为默认排序顺序?

更新:
问题已经得到解答,但有些人已经指出这个解决方案可能并不理想,所以我只想为将来的参考添加一些上下文.这是一个旧系统(不是传统的旧系统,但它已经存在了很多年)使用了一些不同的地方.

应用程序中有多个列表/下拉列表,具有典型的"状态"类型(例如发票状态,订单状态,客户类型等).回到首次编写系统时,这些是每个地方都在使用的标准值(不打算以任何方式进行更改),但是有些用户已经开始请求添加新状态的功能,删除不再使用的状态并指定自定义排序顺序(可能更频繁地使用一种状态,因此将其放在列表顶部是很好的).

我发现这样做的最简单的方法(不必乱用太多的旧代码)是添加两个新字段,Disabled并且SortOrder,添加到所有相关表.该Disabled字段用于"隐藏"未使用的类型(由于引用完整性而无法删除它们,并且还需要保留它们保存的值),并且该SortOrder字段在那里,因此用户可以指定自己的自定义排序顺序.由于所有相关表也共享这两个相同的列,因此很容易创建一个简单的接口来以通用方式处理排序(和禁用).

Mar*_*ith 7

;WITH so AS
(
SELECT 
   SortOrder,
   ROW_NUMBER() OVER (ORDER BY InvoiceStatusName) AS rn
FROM   dbo.InvoiceStatus
)
UPDATE so SET SortOrder = rn
Run Code Online (Sandbox Code Playgroud)