日期:2014-05-17  浏览次数:20423 次

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
------其他解决方案--------------------
学习
引用:
可以用case when试试
http://blog.csdn.net/dba_huangzj/article/details/7684520

------其他解决方案--------------------
引用:
最近在写存储过程的时候感觉with as 非常好用写起来都比较方便,不过我遇到一个问题。比如传递了参数@startindex,@endindex,@orderby 
wth tt as


 select  *  from u 


select  * from c where id between @startindex and @endindex  order  by @or……


这中时候一般考虑动态语句实现吧  叶子哥哥已经给出写法

------其他解决方案--------------------
引用:
如果要用orderby做条件的话,除了拼接我也没有其他办法,等高手来帮你看看吧

SQL code

declare @startindex int set @startindex=16
declare @endindex int set @endindex=25
declare @orderby varchar(20) set @orderby='number'

declare @sq……
支持叶子哥哥~
------其他解决方案--------------------
叶子姐姐当然无可挑剔拉。
------其他解决方案--------------------
你说你是高手吗?程序员搞一个女的头像干嘛
引用:
如果要用orderby做条件的话,除了拼接我也没有其他办法,等高手来帮你看看吧


SQL code

declare @startindex int set @startindex=16
declare @endindex int set @endindex=25
declare @orderby varchar(20) set @orderby='number'

decla……

------其他解决方案--------------------
那两个姐姐都是男滴,别太在乎这事,你还有什么问题?没有就结贴,有就继续问
------其他解决方案--------------------
刚才看了你给我那个链接,感觉可以实现order by 就是要把所有字段都写死,还有就是搜索的时候不方便,如果条件搜索多的话