加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何在不使用动态SQL的情况下在存储过程中使用Ord

发布时间:2020-12-12 07:01:14 所属栏目:MsSql教程 来源:网络整理
导读:我有以下MS SQL存储过程.我需要在不使用动态SQL和sp_executesql方法的情况下对结果进行排序 @Order by可以具有可能的值ProductName ASC,ProductName DESC,ProductCode ASC,VendorName DESC,VendorCode或ClientName 我试图使用ORDER BY CASE,如果ProductName,P
我有以下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)

更新:

以下部分是否正确?从here开始

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,

解决方法

正如您所说:使用ORDER BY CASE,但多次使用以避免不同列类型的问题:
...
ORDER BY 
 CASE WHEN @OrderBy ='ProductName ASC' THEN sv.ProductName END,CASE WHEN @OrderBy ='ProductName DESC' THEN sv.ProductName END DESC,CASE WHEN @OrderBy ='ProductCode ASC' THEN sv.ProductCode END,CASE WHEN @OrderBy ='ProductCode DESC' THEN sv.ProductCode END DESC,CASE WHEN @OrderBy ='VendorName ASC' THEN sv.VendorName END,CASE WHEN @OrderBy ='VendorName DESC' THEN sv.VendorName END DESC,CASE WHEN @OrderBy ='VendorCode' THEN sv.VendorCode END,CASE WHEN @OrderBy ='ClientName' THEN sv.ClientName END

编辑:

更新了查询以适合您更新的问题.我假设你的意思是ProductCode ASC和ProductCode DESC?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读