sql server中的 SET NOCOUNT ON 的含义
2015-12-26 18:49
211 查看
sql server中的 SET NOCOUNT ON 的含义
每次我们在使用查询分析器调试SQL语句的时候,通常会看到一些信息,提醒我们当前有多少个行受到了影响,这是些什么信息?在我们调用的时候这些信息有用吗?是否可以关闭呢? 答案是这些信息在我们的客户端的应用程序中是没有用的,这些信息是存储过程中的每个语句的DONE_IN_PROC 信息。
我们可以利用SET NOCOUNT 来控制这些信息,以达到提高程序性能的目的。
MSDN中帮助如下:
SET NOCOUNT
使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。
语法
SET NOCOUNT { ON | OFF }
注释
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。
当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft SQL Server 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、 UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
权限
SET NOCOUNT 权限默认授予所有用户。
结论:我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上 SET NOCOUNT OFF这样的话,以达到优化存储过程的目的。
还有一种说法:
前台一般是一个返回就当一个结果集, 不管这个返回是结果集, 还是操作的反馈信息.
为了保证前台得到的只是真实的记录集, 而不是反馈信息, 因此得使用 set nocount on
多说两句:
1:在查看SqlServer的帮助的时候,要注意“权限”这一节,因为某些语句是需要一定的权限的,而我们往往忽略。
2:@@ROWCOUNT是返回受上一语句影响的行数,包括找到记录的数目、删除的行数、更新的记录数等,不要认为只是返回查找的记录数目,而且@@ROWCOUNT要紧跟需要判断语句,否则@@ROWCOUNT将返回0。
分类: T-SQL技术
好文要顶 关注我 收藏该文
八神吻你
关注 - 108
粉丝 - 145
+加关注
2
0
(请您对文章做出评价)
« 上一篇:row_number、rank、dense_rank、ntile 用法
» 下一篇:SQL
SERVER 子查询的用法
相关文章推荐
- Oracle 11g R2 RAC RMAN备份脚本示例
- PL/SQL基础语法入门
- 11个面向文档的开源NoSQL数据库
- 从零开始配置MySQL MMM
- mysql数据库备份与恢复
- SQL SERVER删除列,报错."由于一个或多个对象访问此列,ALTER TABLE DROP COLUMN ... 失败"
- mysql无法启动(Table 'mysql.plugin' doesn't exist)
- MongoDB索引概述
- MySQL 向 Redis 高效迁移
- 远程访问mysql(转)
- 通过Gearman实现MySQL到Redis的数据同步
- 国内外三个不同领域巨头分享的Redis实战经验及使用场景
- mysql 中case when 的用法
- Redis中的关系查询
- 【NCRE】---拼接SQL语句(Case....When语句)
- MongoDB 分片集群搭建
- 一次使用 Redis 优化查询性能的实践
- Redis几个认识误区
- 常用数据库语句
- T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)