`

看你知道不知道之-使用SET NOCOUNT优化存储过程

阅读更多

每次我们在使用查询分析器调试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这样的话,以达到优化存储过程的目的。

多说两句:

1:在查看SqlServer的帮助的时候,要注意“权限”这一节,因为某些语句是需要一定的权限的,而我们往往忽略。

2:@@ROWCOUNT是返回受上一语句影响的行数,包括找到记录的数目、删除的行数、更新的记录数等,不要认为只是返回查找的记录数目,而且@@ROWCOUNT要紧跟需要判断语句,否则@@ROWCOUNT将返回0。

3:如果使用表变量,在条件表达式中要使用别名来替代表名,否则系统会报错。

4:在CUD类的操作中一定要有事务处理。

5:使用错误处理程序,用来检查 @@ERROR 系统函数的 T-SQL 语句 (IF) 实际上在进程中清除了 @@ERROR 值,无法再捕获除零之外的任何值,必须使用 SET 或 SELECT 立即捕获错误代码。

分享到:
评论

相关推荐

    SQL Server 优化存储过程的七种方法.doc

    优化存储过程是数据库管理的重要环节,以下是从标题、描述和部分内容中提炼出的七个关键方法: 1. **使用SET NOCOUNT ON选项**: 当在存储过程中使用SELECT语句时,SQL Server默认会返回受影响的行数。通过设置SET...

    百万级的分页存储过程

    ### 百万级的分页存储过程 在处理大量数据时,如何有效地进行分页查询是非常重要的技术之一。本文将详细介绍一个适用于Oracle数据库的高效分页存储过程,并对其内部实现原理进行深入剖析。 #### 存储过程概述 该...

    TSQL 存储过程 游标 数据库 sql优化 存储过程分页

    3. **存储过程的优化**:精简存储过程中的代码,避免不必要的计算和数据读取,使用缓存等。 4. **分区和分表**:对于大型表,可以考虑使用分区或分表策略,以分散I/O负载。 【存储过程分页】 在存储过程中实现分页...

    高效分页存储过程 高效分页存储过程

    高效分页存储过程的实现对于优化数据库性能至关重要。本文将深入探讨如何创建和使用高效的分页存储过程,并针对SQL Server 2005及2010提供一个实用的例子。 首先,理解分页的基本概念。分页通常涉及到两个关键参数...

    SQL Server分页存储过程

    这里,我们将深入探讨如何使用存储过程实现分页查询。 首先,存储过程是SQL Server中预编译的SQL语句集合,它们可以接受参数、执行复杂逻辑并返回结果。在分页查询的上下文中,存储过程能够封装分页逻辑,使代码更...

    ASP与sql存储过程

    4. **性能优化**:合理设计存储过程,避免不必要的数据检索和处理,以提高整体系统性能。 通过上述介绍可以看出,ASP结合SQL存储过程能够有效提升应用程序的性能和安全性,同时也为开发者提供了更加灵活的开发方式...

    经过优化测试的SQL分页存储过程.docx

    以下是一个结合实际应用场景编写的优化存储过程示例: ```sql CREATE procedure pagination1 (@pagesize int, --页面大小,如每页存储20条记录 @pageindex int --当前页码 ) as set nocount on begin declare @...

    存储过程 : 一个获取数据库表中密码的存储过程

    SET NOCOUNT ON; -- 避免命令返回不必要的消息 SELECT @password = pass FROM User_1 WHERE sName = @username; END; ``` 这里的存储过程名为`GetPassword`,接受一个输入参数`@username`用于指定查询的用户名...

    SQL存储过程 模板

    1. **性能优化**:由于存储过程预先编译,执行效率比单独的SQL语句高。 2. **代码复用**:可以多次调用,减少网络传输,降低数据库压力。 3. **安全性**:通过权限控制,限制对数据的直接访问,提高数据安全。 4. **...

    万能分页存储过程

    万能分页存储过程之所以被称为“万能”,是因为它应该具备足够的灵活性和通用性,能够适应各种表结构和查询需求,而不局限于特定的场景或数据模型。 首先,我们来理解分页的基本原理。分页查询通常涉及到两个关键...

    sqlserver的存储过程与 where in 多值参数

    你可以在存储过程中接收一个包含多个值的参数,如一个字符串,然后动态拼接`DELETE`或`SELECT`等SQL语句。例如: ```sql CREATE PROCEDURE usp/DeleteByIds (@idList VARCHAR(MAX)) AS BEGIN SET NOCOUNT ON; ...

    C# 存储过程实现分页

    此外,如果你使用的是ORM框架,如Entity Framework,调用存储过程的方式可能会有所不同,但基本思路是一致的。 总之,通过在C#中使用SQL Server的存储过程,我们可以有效地实现分页功能,从而提高数据检索效率并...

    数据库的存储过程的建立

    ### 数据库存储过程的建立 在数据库管理领域中,存储过程是一种重要...在实际应用中,还需要结合具体的业务需求来调整这些存储过程的具体实现细节,例如增加日志记录、优化错误处理机制等,以满足更加复杂的应用场景。

    优化大全sql(绝对全)

    在执行批处理过程中,控制 SET NOCOUNT 的设置可以避免不必要的消息传递。 **建议做法:** - 在批处理开始时设置 `SET NOCOUNT ON`。 - 在批处理结束时设置 `SET NOCOUNT OFF`。 #### 29. 考虑系统资源限制 在...

    常用存储过程集锦

    首先,【分页查找数据】的存储过程`[dbo].[GetRecordSet]`用于处理分页查询,这是在大型数据集上常用的一种优化方法,以避免一次性加载所有数据导致性能下降。这个存储过程接受查询SQL、当前页码和每页记录数作为...

    存储过程分页

    为了提高查询效率和用户体验,分页成为了必不可少的功能之一。其中,利用存储过程实现分页是一种非常有效的方法。本篇文章将深入探讨如何使用存储过程进行分页,并分析不同方法的特点与适用场景。 #### 二、存储...

    asp.net三层架构用存储过程实现gridview分页

    1. **SQL查询优化**:使用特定的SQL语句或者存储过程来实现精确的数据查询。 2. **数据分页逻辑**:在业务逻辑层编写合理的分页逻辑,确保每次只加载所需的数据。 3. **前端展示**:使用GridView等控件来展示分页后...

Global site tag (gtag.js) - Google Analytics