随笔 - 99  文章 - 2 评论 - 901 trackbacks - 17
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789


转载请保留链接。
国家体育场(鸟巢)是建筑史上的令人惊叹之作,杂乱的基础结构组成了一个和谐的整体,正是中国社会的成功写照。 7-18 17:44

与我联系

常用链接

留言簿(11)

我参与的团队

我的标签

随笔分类

随笔档案

文章分类

相册

最新随笔

搜索

  •  

积分与排名

  • 积分 - 141203
  • 排名 - 243

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

 sql server2000中我们如果需要使用存储过程指定参数取前n条记录时,我们不得不在存储过程中拼sql,然后exec拼接的sql字符串,这样导致存储过程每次执行都需要预编译sql语句;使存储过程的预编译功能无效了。

而在sql server2005中,对top语句进行了增强我们可以这样写:
SELECT TOP @cn * FROM tableName cols where 0 = 0

甚至使用子查询确定要去的条数:
SELECT TOP (select count(*) cn from anotherTable where 0 = 0) cols FROM tableName where 0 = 0 ORDER BY col

还有一点就是在sql server2005中可以在delete或者update中使用top了,不过感觉这个功能不会很常用。

Tag标签: top,t-sql
posted on 2008-04-29 09:31 玉开 阅读(258) 评论(5)  编辑 收藏 所属分类: 数据库sql server

FeedBack:
#1楼  2008-04-29 09:56 PerfectDesign      
@玉开
在sql server2000中我们如果需要使用存储过程指定参数取前n条记录时,我们不得不在存储过程中拼sql,然后exec拼接的sql字符串,这样导致存储过程每次执行都需要预编译sql语句;使存储过程的预编译功能无效了。

sqlserver预编译具有参数嗅探功能,如果是参数变化而其他地方不变化的话,执行计划还是可以重用的。

另外,不要使用exec执行,推荐sp_executesql

  回复  引用  查看    
#2楼 [楼主] 2008-04-29 11:19 玉开      
@PerfectDesign
3Q
  回复  引用  查看    
#3楼  2008-04-29 11:38 Goodspeed      
正确写法应该是

SELECT TOP (@cn) * FROM tableName cols where 0 = 0
  回复  引用  查看    
#4楼 [楼主] 2008-04-29 13:37 玉开      
@Goodspeed
3Q

  回复  引用  查看    
#5楼  2008-04-30 13:24 李战      
好!我得到了
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-07 09:00 编辑过
 
另存  打印