Mssql存储过程SELECT TOP n

今天QQ群中人在问,他在MSSQL上写一个存储过程的时候出现了一个问题,搞了半天,一直没有解决,有点郁闷,呵呵! 他想要写个要实现SELECT TOP n [art_title],[art_time] FROM [cl_articles] ORDER BY [art_id] DESC的存储过程:
1
2
3
4
5
CREATE procedure
getIndexPost
@pageSize int
AS
SELECT TOP @pageSize [art_title],[art_time]  FROM cl_articles  ORDER BY art_id DESC
不过在执行的时候却提示在@pageSize处有错误,仔细检查后发现单词和语句都没有写错,于是换为:
1
2
3
4
5
CREATE procedure
getIndexPost
@pageSize int
AS
SELECT TOP 5 [art_title],[art_time]  FROM cl_articles  ORDER BY art_id DESC
这时候,错误提示消失了,可以创建!再换为:
1
2
3
4
5
CREATE procedure
getIndexPost
@pageSize int
AS
SELECT TOP 5 [art_title],[art_time]  FROM cl_articles WHERE [art_id]=@pageSize  ORDER BY art_id DESC
同样没有错误,可以创建!
看到这个问题,我想到当初我也被这个问题困扰了一段时间,后来没有办法,只有通过存储过程中生成字符串语句来调用,不知道这样会不会造成性能损失呢? 有通过存储过程中生成字符串语句来调用的存储过程:
1
2
3
4
5
CREATE procedure 
getIndexPost
@pageSize int
AS
exec('SELECT TOP '+@pageSize+' [art_title],[art_time]  FROM cl_articles  ORDER BY art_id DESC');

“Mssql存储过程SELECT TOP n”   2 comments

哈哈,应该才发表没有多久哦!刚刚来还没有发现!一天到晚真无聊啊,到处转博客!什么时候我也开个
avatar
今天没有更新哦,懒了?
avatar

Leave a comment:

XHTML: You can use these tags: <a href="" title=""> <b> <blockquote cite=""> <em> <i> <strong> <p> <br><br />