WITH AS sql 查询问题
最近在写存储过程的时候感觉with as 非常好用写起来都比较方便,不过我遇到一个问题。比如传递了参数@startindex,@endindex,@orderby
wth tt as
(
select * from u
)
select * from c where id between @startindex and @endindex order by @orderby 问题就是这个参数@orderby怎么处理好呢》
我最终解决的办法就是声明一个临时表插入 insert into #t2 select * from c 然后exec('select * from #t2 order by '+@orderby+' ')
最终搞来搞去又是拼接了字符,就没好的解决方法了吗?我虽然平时要求自己多想方法少写一点代码,总是想找一个方法来替代它,我还是没放弃觉得应该有更好的实现是我不知道罢了。
[最优解释]
如果要用orderby做条件的话,除了拼接我也没有其他办法,等高手来帮你看看吧
declare @startindex int set @startindex=16
declare @endindex int set @endindex=25
declare @orderby varchar(20) set @orderby='number'
declare @sql varchar(max)
set @sql='
;with maco as
(
select row_number() over (order by '+@orderby+') as rowid,*
from master..spt_values
)
select * from maco
where rowid between '+ltrim(@startindex)+' and '+ltrim(@endindex)
exec(@sql)
[其他解释]
可以用case when试试
http://blog.csdn.net/dba_huangzj/article/details/7684520
[其他解释]
学习
[其他解释]
这中时候一般考虑动态语句实现吧 叶子哥哥已经给出写法
了
[其他解释]
支持叶子哥哥~
[其他解释]
叶子姐姐当然无可挑剔拉。
[其他解释]
你说你是高手吗?程序员搞一个女的头像干嘛
[其他解释]
那两个姐姐都是男滴,别太在乎这事,你还有什么问题?没有就结贴,有就继续问
[其他解释]
刚才看了你给我那个链接,感觉可以实现order by 就是要把所有字段都写死,还有就是搜索的时候不方便,如果条件搜索多的话
[其他解释]
这也是一种方法,目前为止我已经找到了很多种方法
[其他解释]
case when加拼接sql的话,可以随你的参数而排序,不一定要写死