读书人

惭愧这个存储过程报错不知道如何改

发布时间: 2012-03-19 22:03:05 作者: rapoo

惭愧,这个存储过程报错,不知道怎么改,特来请教。
就是普通的select top n *,我想取前几条能用变量自己设定,但是select top @Total * 貌似不能用,不知道该改成什么样的,求指导。谢谢!


SQL code
CREATE PROCEDURE Getlist@Classid int,@Total intASif(@Total>=6)  select top 6 * from tb_article where Classid = @Classidelse  beginselect top @Total * from tb_article where Classid = @Classidunion allselect top (6 - @Total) * from tb_article where Classid = @Classid end


[解决办法]

如需要阅读该回复,请登录或注册CSDN!


[解决办法]
加个 () 如
SQL code
select top (@Total) * from tb_article where Classid = @Classid
[解决办法]
CREATE PROCEDURE Getlist
@Classid int,
@Total int

AS
if(@Total>=6)
select top 6 * from tb_article where Classid = @Classid
else
begin
declare @sql nvarchar(4000)
set @sql='select top '+ltrim(@Total)+' * from tb_article where Classid = '+ltrim(@Classid)+'
union all
select top '+ltrim(6 - @Total)+' * from tb_article where Classid = '+ltrim(@Classid))
exec(@sql)
end

SQL2K
[解决办法]
top(@Total) 05及以上版本可以。

如果是2000,需要拼接SQL的动态语句去执行。
[解决办法]
SQL code
select top (@Total) * from tb_article where Classid = @Classid
[解决办法]
探讨

我在 union all 前面的select语句加了 order by xxx 会报错。但是从功能上来说 order by又必须加。再次请求帮助

[解决办法]

读书人网 >SQL Server

热点推荐