sql中select top n数字n参数化

sql中select top n数字n参数化

4785发表于2015-07-16

类似select top 10 * from News这样语句,我们想把这个sql名句作为通用sql,首先想到就是到的就是把这个top N数字作为参数。
下面我来测试一下:
DECLARE @limit INT
SET @limit=10
SELECT TOP @limit n.* FROM News n with(nolock)  ORDER BY n.CreateTime DESC

执行结果:
消息 102,级别 15,状态 1,第 3 行
'@limit' 附近有语法错误。
消息 319,级别 15,状态 1,第 3 行
关键字 'with' 附近有语法错误。如果此语句是公用表表达式或 xmlnamespaces 子句,那么前一个语句必须以分号结尾。

报错了!!!。但是我们又想把这个top的数字作为参数,怎么办呢?很简单,在sql2005及以上版本就是把上面语句改成:
SELECT TOP (@limit) n.* FROM News n with(nolock)  ORDER BY n.CreateTime DESC

执行得到我们想要的结果。下面看看在ibatis.Net中sql中top n只显示前几条数据,作为参数的写法。
<select id="GetBearNewsLatest" resultClass="News" parameterClass="long">
      SELECT TOP (#value#) n.* FROM News n with(nolock) ORDER BY n.CreateTime DESC
</select>

对于版本低于sql2005使用下面的方式:

DECLARE @limit INT
SET @limit=10

SET ROWCOUNT @limit
SELECT n.* FROM News n with(nolock) ORDER BY n.CreateTime DESC


小编蓝狐