The*_*ter 4 t-sql stored-procedures
我有以下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
Run Code Online (Sandbox Code Playgroud)
现在该SP中的所有内容都有效但我希望能够选择是否要对ASCENDING或DESCENDING进行排序.我真的无法使用SQL找不到解决方案,也无法在谷歌中找到任何东西.
正如你所看到的,我有参数sortDirection,我尝试过多种方式使用它,但总是有错误...尝试过Case Casements,IF语句等等,但由于我想插入一个关键字,这很复杂.
帮助将非常受欢迎,我已经尝试了必须考虑的事情,但未能做到正确.
您可以使用两个按字段排序:
CASE @sortDir WHEN 'ASC' THEN
CASE UPPER(@sortBy)
...
END
END ASC,
CASE @sortDir WHEN 'DESC' THEN
CASE UPPER(@sortBy)
...
END
END DESC
Run Code Online (Sandbox Code Playgroud)
如果没有WHEN子句匹配,CASE将评估为NULL,因此导致两个字段中的一个为每行计算为NULL(不影响排序顺序),另一个具有适当的方向.
但是,一个缺点是您需要复制@sortBy CASE语句.您可以使用带有sp_executesql的动态SQL并根据参数编写"ASC"或"DESC"文字来实现相同的功能.