Comment utiliser Order By dans une procédure stockée sans l'aide de SQL dynamique

J'ai de la suite MS SQL procédure stockée. J'ai besoin de trier les résultats sans l'aide de SQL dynamique et sp_executesql méthode

@Order by peut avoir les valeurs possibles ProductName ASC, ProductName DESC, ProductCode ASC, VendorName DESC, VendorCode ou ClientName

J'ai essayé d'utiliser ORDER BY CASE, est-il un problème si le ProductName, ProductCode sont de type différent?

ALTER PROCEDURE [dbo].[SortedReport]
(
    @ClientID INT,
    @RecordLimit,
    @FromDate DATETIME,
    @ToDate DATETIME,
    @OrderBy NVARCHAR(MAX)
)

AS
BEGIN

IF (@OrderBy IS NULL) BEGIN
    SET @OrderBy = 'ProductName';
END    

SELECT TOP (@RecordLimit) 
        sv.ClientID,
        sv.VendorID,
        sv.ProductID,
        sv.TransactionTime,
        sv.ClientName,
        sv.VendorName,
        sv.ProductName,
        sv.ProductCode,
        sv.VendorCode,
FROM SortedReportiew AS sv 
WHERE (sv.ClientID = @ClientID)
    AND (sv.TransactionTime >= @FromDate)
    AND (sv.TransactionTime < @Date)

Mise à jour:

Est le ci-dessous une partie correcte? ref de ici

ORDER BY 
    CASE @OrderBy WHEN 'ProductCode ASC' THEN ProductCode WHEN 'ProductCode DESC' THEN ProductCode END DESC,
    CASE @OrderBy WHEN 'ProductName ASC' THEN ProductName WHEN 'ProductName DESC' THEN ProductName END DESC,
Pourquoi ne pas le SQL dynamique? C'est beaucoup plus rapide que n'importe quel de la statique des solutions pour ce genre de problème.
Pourquoi voulez-vous éviter de SQL dynamique pour exécuter une instruction dynamique?
Winand , tout simplement parce que le client voulez convertir ces dynamiques SQL statique
Donc, demander au client pourquoi le faire 😉 Il y a le "le SQL dynamique est lente mythe" qui conduit à de nombreuses reprises pour les demandes de ce genre. Cependant, le fait correctement dynamique-sql (en utilisant bind-paramétrée) est généralement meilleure.
se débarrasser de sql dynamique pour le "order by" entraîne une amélioration des performances à travers ces ordre par les requêtes.

OriginalL'auteur Mithun Sreedharan | 2011-05-17