Recientemente agregué un par de campos a algunas tablas en mi base de datos (SQL Server 2005) para permitir a los usuarios personalizar el orden de las filas. He seguido este patrón para todas las tablas:Establecer el campo de orden de clasificación según el orden alfabético de otro campo
-- 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
Normalmente, como se puede ver, he utilizado la clave principal como el orden predeterminado. Sin embargo, ahora estoy en la situación de que me gustaría utilizar el orden alfabético de un campo de texto en la tabla como el orden de clasificación predeterminado.
Utilizando la tabla anterior como ejemplo (que tiene un campo de texto [InvoiceStatusName]
), ¿hay alguna consulta corta y bonita similar que pueda escribir para usar el orden alfabético de [InvoiceStatusName]
como orden de clasificación predeterminado?
Actualización:
La pregunta ya está contestada, pero algunos han señalado que esta solución podría no ser ideal por lo que sólo quieren añadir un cierto contexto para futuras referencias. Este es un sistema antiguo (no antiguo, pero ha existido durante algunos años) en uso en un puñado de lugares diferentes.
Hay varias listas/menús desplegables en la aplicación con su "status" tipo típico (como estado de la factura, estado orden, tipo cliente etc.). Antes, cuando el sistema se escribió por primera vez, estos eran valores estándar en uso en todos los lugares (no destinados a ser cambiados de ninguna manera), pero algunos usuarios han comenzado a solicitar la posibilidad de agregar nuevos estados, eliminar los que ya no están en uso y especificar una costumbre orden de clasificación (un estado puede ser usado con más frecuencia, y es bueno tenerlo en la parte superior de la lista).
La manera más fácil que encontré para hacerlo (sin tener que meterme demasiado con el código anterior) fue agregar dos nuevos campos, Disabled
y , a todas las tablas relevantes. El campo Disabled
se usa para "ocultar" tipos no utilizados (no puede eliminarlos debido a la integridad referencial, y el valor que guardan también debe mantenerse), y el campo SortOrder
está allí para que los usuarios puedan especificar su propio tipo personalizado orden. Dado que todas las tablas relevantes también comparten estas mismas dos columnas, fue muy fácil crear una interfaz simple para manejar la clasificación (y la desactivación) de una manera genérica.
+1 thx Martin. Aprendí algo nuevo hoy. * Por cierto, puede soltar la columna InvoiceStatusID. * –
Gracias tanto a Martin como a Lieven. Ambas sugerencias son buenas, pero elegí la de Martin como la aceptada porque tenía el aspecto más limpio. – Nailuj