存储过程高手请进,一旦解决,马上给分

Fusuli 2003-10-15 10:02:31
问题也不难,就是一个存储过程,有两个参数,一个是需要排序的列号,另一个是排序的次序标志:
PROCEDURE sp_GetSet
(
@order smallint,
@asc smallint
)
AS
begin
if (@order = 1)
begin
select * from Tenancy_Room
order by id --按id排序
end
else if(@order = 2)
begin
select * from Tenancy_Room
order by price --按价格排序
end
else
begin
select * from Tenancy_Room
end

end

但是排序的asc和desc怎么加呢,除了if语句嵌套以外还有什么好办法?能不能用一个select就搞定
...全文
27 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2003-10-15
  • 打赏
  • 举报
回复
--用生成SQL语句的方法来实现吧:

create PROCEDURE sp_GetSet
@order smallint, --字段是表中的顺序号
@asc smallint --1为升序,其他值为降序,建议改为bit类型
AS
declare @sql varchar(8000)
select @sql='select * from Tenancy_Room order by '+name
+case @asc when 1 then ' asc' else ' desc' end
from syscolumns where object_id('Tenancy_Room')=id and colid=@order
exec(@sql)
go
realgz 2003-10-15
  • 打赏
  • 举报
回复
PROCEDURE sp_GetSet
(
@order smallint,
@asc smallint
)
AS
select * from Tenancy_Room
order by case
when @order=1 and @asc=1 then id
when @order=1 and @asc=2 then 0-id
when @order=2 and @asc=1 then price
when @order=2 and @asc=2 then 0-price
else newid() --如果选项无效,这句话纯属好玩,叫随机排序
end


大力的启发啊。。。。
Dennis618 2003-10-15
  • 打赏
  • 举报
回复
PROCEDURE sp_GetSet
(
@order smallint,
@asc smallint
)
AS
begin
if (@order = 1)
begin
select * from Tenancy_Room
order by id desc --按id排序
end
else if(@order = 2)
begin
select * from Tenancy_Room
order by price --按价格排序
end
else
begin
select * from Tenancy_Room
end

end
--desc在order by 後面加.不加desc的情況默認為asc
arrow_gx 2003-10-15
  • 打赏
  • 举报
回复
PROCEDURE sp_GetSet
(
@order smallint,
@asc smallint
)
AS
begin

declare @sqlr varchar(2000)

set @sql='select * from Tenancy_Room order by '+case @order when 1 then 'id' when 2 then 'price' else '' end+case @asc when 1 then ' desc' else '' end

exec(@sql)
pengdali 2003-10-15
  • 打赏
  • 举报
回复
打个补丁:


PROCEDURE sp_GetSet
(
@order smallint,
@asc smallint
)
AS
begin

declare @a varchar(2000)
set @a='select * from Tenancy_Room '+case @order when 1 then 'order by id' when 2 then 'order by price' else '' end+case when @order in (1,2) and @asc=1 then ' desc' else '' end
exec(@a)
yujohny 2003-10-15
  • 打赏
  • 举报
回复
create PROCEDURE sp_GetSet
(
@order smallint,
@asc smallint
)
AS
begin
declare @sql nvarchar(4000),@pxsql nvarchar(10)
if @asc=1 set @pxsql=' asc' else set @pxsql=' desc'
if (@order = 1)
set @sql='select * from Tenancy_Room order by id'
else if(@order = 2)
set @sql='select * from Tenancy_Room order by price'
else
set @sql='select * from Tenancy_Room'

set @sql=@sql+@pxsql

exec(@sql)

end
pengdali 2003-10-15
  • 打赏
  • 举报
回复
PROCEDURE sp_GetSet
(
@order smallint,
@asc smallint
)
AS
begin

declare @a varchar(2000)
set @a='select * from Tenancy_Room order by '+case @order when 1 then 'id' when 2 then 'price' else '' end+case @asc when 1 then ' desc' else '' end
exec(@a)
txlicenhe 2003-10-15
  • 打赏
  • 举报
回复
if @order = 1 and @asc = 1 then
select * from Tenancy_Room order by id
else if @order = 1 and @asc = 2 then
select * from Tenancy_Room order by id desc
else if @order = 2 and @asc = 1 then
select * from Tenancy_Room order by price
else if @order = 2 and @asc = 2 then
select * from Tenancy_Room order by price desc
else
select * from Tenancy_Room
end


pengdali 2003-10-15
  • 打赏
  • 举报
回复
PROCEDURE sp_GetSet
(
@order smallint,
@asc smallint
)
AS
begin


select * from Tenancy_Room order by case @order when 1 then id when 2 then price else 1 end
txlicenhe 2003-10-15
  • 打赏
  • 举报
回复
1: asc desc加在 order by id 后面
PROCEDURE sp_GetSet
(
@order smallint,
@asc smallint
)
AS
begin
if (@order = 1)
begin
select * from Tenancy_Room
order by id desc
end
else if(@order = 2)
begin
select * from Tenancy_Room
order by price asc
end
else
begin
select * from Tenancy_Room
end

end

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧