我编写一个SP作为参数列接受排序和方向.
我不想使用动态SQL.
问题是设置方向参数.
这是部分代码:
SET @OrderByColumn = 'AddedDate'
SET @OrderDirection = 1;
…
ORDER BY
CASE WHEN @OrderByColumn = 'AddedDate' THEN CONVERT(varchar(50), AddedDate)
WHEN @OrderByColumn = 'Visible' THEN CONVERT(varchar(2), Visible)
WHEN @OrderByColumn = 'AddedBy' THEN AddedBy
WHEN @OrderByColumn = 'Title' THEN Title
END
Run Code Online (Sandbox Code Playgroud) 在MS SQL Server 2008 R2中编写存储过程,我想避免使用DSQL ...
我希望sort方法(ASC或DESC)是有条件的.
现在,使用数字列,我只需使用case语句并取消值来模拟ASC或DESC ......即:
... ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [NumericColumn] ELSE -[NumericColumn] END ASC
Run Code Online (Sandbox Code Playgroud)
使用alpha列执行此操作的适当方法是什么?
编辑:我想到了一个聪明的方法,但它看起来非常低效......我可以将我的有序alpha列插入带有自动编号的临时表中,然后使用上述方法按自动编号排序.
EDIT2:
你们怎么看待这种方法?
ORDER BY CASE @OrderAscOrDesc WHEN 0 THEN [AlphaColumn] ELSE '' END ASC,
CASE @OrderAscOrDesc WHEN 0 THEN '' ELSE [AlphaColumn] END DESC
Run Code Online (Sandbox Code Playgroud)
我不知道是否强制对统一列进行排序比从排序字符串中导出数字更有效
我有以下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 …Run Code Online (Sandbox Code Playgroud) 我有一些表用于存储不同的文件信息,如拇指,图像,数据表,...
我正在编写一个存储过程来检索特定ID的文件名.就像是:
CREATE PROCEDURE get_file_name(
@id int,
@table nvarchar(50)
)as
if @table='images'
select [filename] from images
where id = @id
if @table='icons'
select [filename] from icons
where id = @id
....
Run Code Online (Sandbox Code Playgroud)
如何使用case when语句重写此过程,还是只使用表名作为变量?