J'ai la procédure stockée MS SQL suivante. J'ai besoin de trier les résultats sans utiliser de SQL dynamique et de sp_executesql
méthode
@Order by peut avoir les valeurs suivantes ProductName ASC
, ProductName DESC
, ProductCode ASC
, VendorName DESC
, VendorCode
o ClientName
J'essayais d'utiliser ORDER BY CASE
Est-ce qu'il y a 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 :
La partie ci-dessous est-elle correcte ? réf. de aquí
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,