Jeremiah V. partage avec nous une règle universelle en informatique : quelque soit le langage utilisé, il existe toujours une autre façon plus longue de faire les choses. Pour les bases de données compatibles SQL-92, ce n’est pas évident d'avoir une clause ORDER BY générée dynamiquement, il existe cependant plusieurs façons de produire une implémentation raisonnable. Pour exemple, une recherche rapide sur Google propose l'utilisation combinée de CASE et CONVERT pour gérer le « ORDER BY » dynamique avec plusieurs types de colonnes.
Jeremiah a trouvé une solution bien plus longue à ce problème, pas de CASE et CONVERT mais une longueur de code bien plus importante... espérons juste qu'ils n'ajoutent pas de nouvelles colonnes :
IF @OrderByCriteria LIKE 'receipt_date, Account_Number, major_version, minor_version, Vendor_ID'
SELECT * FROM @Table_Input ORDER BY receipt_date, Account_Number, major_version, minor_version, Vendor_ID
ELSE IF @OrderByCriteria LIKE 'receipt_date, Account_Number, Vendor_ID, major_version, minor_version'
SELECT * FROM @Table_Input ORDER BY receipt_date, Account_Number, Vendor_ID, major_version, minor_version
ELSE IF @OrderByCriteria LIKE 'receipt_date, major_version, minor_version, Account_Number, Vendor_ID'
SELECT * FROM @Table_Input ORDER BY receipt_date, major_version, minor_version, Account_Number, Vendor_ID
ELSE IF @OrderByCriteria LIKE 'receipt_date, major_version, minor_version, Vendor_ID, Account_Number'
SELECT * FROM @Table_Input ORDER BY receipt_date, major_version, minor_version, Vendor_ID, Account_Number
ELSE IF @OrderByCriteria LIKE 'receipt_date, Vendor_ID, Account_Number, major_version, minor_version'
SELECT * FROM @Table_Input ORDER BY receipt_date, Vendor_ID, Account_Number, major_version, minor_version
ELSE IF @OrderByCriteria LIKE 'receipt_date, Vendor_ID, major_version, minor_version, Account_Number'
SELECT * FROM @Table_Input ORDER BY receipt_date, Vendor_ID, major_version, minor_version, Account_Number
ELSE IF @OrderByCriteria LIKE 'Account_Number, receipt_date, major_version, minor_version, Vendor_ID'
SELECT * FROM @Table_Input ORDER BY Account_Number, receipt_date, major_version, minor_version, Vendor_ID
ELSE IF @OrderByCriteria LIKE 'Account_Number, receipt_date, Vendor_ID, major_version, minor_version'
... (et ainsi de suite)