J'essaie d'utiliser un ordre dynamique dans une procédure stockée afin que je puisse transmettre l'ordre dans lequel je veux que les données renvoyées dans la procédure stockée soient un paramètre. Cela fonctionne bien pour les champs VARCHAR si je tente de trier un champ int ou datetime il des erreurs le code est à moi est comme suitSQL Server Dynamic Order By
DECLARE @ORDERBY INT
SET @ORDERBY = 1
SELECT TOP 10 * FROM TBL_LMS_USERS_RECORDs_LAST_ATTEMPT
ORDER BY
CASE
WHEN @OrderBy = 1 THEN s10_record_dow
--WHEN @OrderBy = 2 THEN pk_big_record_id
else s10_record_dow
END
Si je décommenter la deuxième QUAND dans les erreurs de déclaration de cas de elle avec
"Erreur lors de la conversion du type de données varchar en bigint."
Je peux commander par ce champ très bien si je n'utilise pas l'instruction case.
Des idées?
Merci qui semble fonctionner, par intérêt pourquoi était-il fonctionnait bien comment je l'avais avec VARCHAR mais pour utiliser INT ou d'autres types de données que j'ai l'avoir comme ça? – Gavin
Tous les champs du cas doivent être évalués au même type de données. Mais, si tous les champs de votre liste peuvent être convertis en un seul type de données, vous devriez pouvoir utiliser une seule instruction Case ... si vous Cast les colonnes de données à ce type de données à l'intérieur de l'affaire –