首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

惭愧,这个存储过程报错,不知道如何改,特来请问

2012-03-19 
惭愧,这个存储过程报错,不知道怎么改,特来请教。就是普通的select top n *,我想取前几条能用变量自己设定,

惭愧,这个存储过程报错,不知道怎么改,特来请教。
就是普通的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


[解决办法]

[解决办法]
加个 () 如
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又必须加。再次请求帮助

[解决办法]

热点排行