gpt4 book ai didi

tsql - DESCENDING/ASCENDING 存储过程的参数

转载 作者:行者123 更新时间:2023-12-04 22:53:33 25 4
gpt4 key购买 nike

我有以下 SP

CREATE PROCEDURE GetAllHouses
set @webRegionID = 2
set @sortBy = 'case_no'
set @sortDirection = 'ASC'

AS
BEGIN

Select
tbl_houses.*
from tbl_houses
where
postal in (select zipcode from crm_zipcodes where web_region_id = @webRegionID)
ORDER BY
CASE UPPER(@sortBy)
when 'CASE_NO' then case_no
when 'AREA' then area
when 'FURNISHED' then furnished
when 'TYPE' then [type]
when 'SQUAREFEETS' then squarefeets
when 'BEDROOMS' then bedrooms
when 'LIVINGROOMS' then livingrooms
when 'BATHROOMS' then bathrooms
when 'LEASE_FROM' then lease_from
when 'RENT' then rent
else case_no
END
END
GO

现在该 SP 中的所有内容都可以正常工作,但我希望能够选择是要对 ASCENDING 还是 DESCENDING 进行排序。
我真的找不到使用 SQL 的解决方案,并且在 google 中找不到任何东西。

正如您所看到的,我有参数 sortDirection,我尝试以多种方式使用它,但总是有错误...尝试案例语句、IF 语句等,但由于我想插入关键字,这很复杂。

帮助将非常有用,我已经尝试了必须想到的事情,但无法正确解决。

最佳答案

您可以使用两个 order by 字段:

CASE @sortDir WHEN 'ASC' THEN
CASE UPPER(@sortBy)
...
END
END ASC,
CASE @sortDir WHEN 'DESC' THEN
CASE UPPER(@sortBy)
...
END
END DESC

如果 WHEN 子句都不匹配,则 CASE 将评估为 NULL,因此这会导致两个字段中的一个对每一行评估为 NULL(不影响排序顺序),另一个具有适当的方向。

但是,一个缺点是您需要复制 @sortBy CASE 语句。您可以使用带有 sp_executesql 的动态 SQL 并根据参数编写“ASC”或“DESC”文字来实现相同的目的。

关于tsql - DESCENDING/ASCENDING 存储过程的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/848340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com