今天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'); |