SQL Server动态ORDER BY如何实现升序排列且NULL值置后
问题原因
现有ORDER BY逻辑仅实现了「非空值标记为0、NULL值标记为1」的第一层排序规则,缺少非空值本身按UngradedDescription升序排序的第二层规则,因此非空结果的顺序不符合预期。
修正后代码
DECLARE @Sort varchar(300); SET @Sort = 'UngradedDescription asc' SELECT [UngradedDescription] FROM [dbo].[CardListing_Staging] ORDER BY -- 第一层排序:非空值在前,NULL在后 CASE WHEN @Sort = 'UngradedDescription asc' THEN CASE WHEN UngradedDescription IS NULL THEN 1 ELSE 0 END END ASC, -- 第二层排序:非空值按UngradedDescription升序排列 CASE WHEN @Sort = 'UngradedDescription asc' THEN UngradedDescription END ASC
扩展说明
如果后续需要新增其他排序规则(比如其他字段升/降序),可以按相同结构在ORDER BY后追加对应的CASE分支即可,无需拼接动态SQL,可避免SQL注入风险。
内容的提问来源于stack exchange,提问作者Train
相关产品推荐
相关产品推荐

