Как использовать Order By в хранимой процедуре без использования динамического SQL

У меня есть следующая хранимая процедура MS SQL. Мне нужно отсортировать результаты без использования динамического SQL, и метод sp_executesql

@Order by может иметь возможные значения ProductName ASC , ProductName DESC , ] ProductCode ASC , VendorName DESC , VendorCode или ClientName

Я пытался использовать ORDER BY CASE , есть ли проблемы если ProductName , ProductCode имеют другой тип?

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)

Обновление:

Правильно ли указано ниже? ссылка из здесь

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,

7
задан Mithun Sreedharan 17 May 2011 в 06:22
поделиться