`
luliangok
  • 浏览: 780035 次
文章分类
社区版块
存档分类
最新评论

使用SET NOCOUNT ON

 
阅读更多

触发器使表格和交叉数据库之间自动同步变得更容易。但是其性能可能会受到很大的影响。这里我将指出一个能减少这种无法预料问题影响的命令。例如,当INSERT触发器重复地被激活,尤其当使用“INSERT INTO”语句进行大量的插入操作,在这种触发器一再被激活的情况下,触发器每个插入操作会发出“DONE_IN_PROC”信息,这会严重地减慢速度。

如果触发器正在获取结构化查询语言服务器代理程序的结果,这种减速尤其明显。结构化查询语言服务器代理程序自动地对后来的每个“DONE_IN_PROC”信号施加一个延时,以避免服务器拥塞。如果你尝试通过查询分析器运行同样的指令集,由于没有这样的延时,它将执行得更快。如果你通过查询分析器运行这样的一个查询,并且检查多重的" n rows affected "语句,很可能查询会被重复地进行并且比实际所需的再多激活触发器很多次。

  关闭“DONE_IN_PROC”信息,可以在一个触发器语句开始的时候使用“SET NOCOUNT ON”命令。触发器时常不需要行计数器。如果是这样,你可以考虑改变激活触发器的命令(或者触发器本身),使得所有变更一次完成。如果这过程仍然费时太久,为了简化起见,你应该重新考虑触发器被激活的方式。

SET NOCOUNT

使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。

语法

SET NOCOUNT { ON | OFF }

注释

SET NOCOUNT ON时,不返回计数(表示受Transact-SQL语句影响的行数),但会更新@@ROWCount

SET NOCOUNTOFF时,返回计数

SET NOCOUNT ON时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft SQL Server 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECTINSERTUPDATE DELETE)结束时将不会在查询结果中显示"n rows affected"

如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。

SET NOCOUNT设置是在执行或运行时设置,而不是在分析时设置。

权限

SET NOCOUNT 权限默认授予所有用户。

分享到:
评论

相关推荐

    SQLServer2008查询性能优化 2/2

    11.7.2 使用SET NOCOUNT 311 11.8 降低事务开销 312 11.8.1 减少日志开销 312 11.8.2 减少锁开销 314 11.9 小结 315 第12章 阻塞分析 316 12.1 阻塞基础知识 316 12.2 理解阻塞 317 12.2.1 原子性 317 ...

    SQLServer2008查询性能优化 1/2

    11.7.2 使用SET NOCOUNT 311 11.8 降低事务开销 312 11.8.1 减少日志开销 312 11.8.2 减少锁开销 314 11.9 小结 315 第12章 阻塞分析 316 12.1 阻塞基础知识 316 12.2 理解阻塞 317 12.2.1 原子性 317 ...

    存储过程的安全及性能优化

     默认情况存储过程会返回每条语句执行后的影响行数,如果不需要这些信息的话,可以使用SET NOCOUNT ON来终止这种返回行为,这样可以避免客户端和服务器之间多次进行信息传递的过程。  减少可选参数:频繁使用可...

    SQL实际应用面试题

    SET NOCOUNT ON SET ROWCOUNT @rows Select a.au_id, a.au_fname + ' ' + au_lname AS name FROM authors a Where a.au_id > @id orDER BY a.au_id SET ROWCOUNT 0 SET NOCOUNT OFF GO Create PROCEDURE ...

    SQL SERVER 2008 开发系列

    SQL SERVER 2008 开发系列,分15个课时介绍了我们在日常使用SQLServer过程中需要注意的问题和一些应用。

    sqlserver2005存储过程例子

    -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; CREATE TABLE [dbo].[ReDealCheck]( [AppplyNo] [varchar](50) COLLATE Chinese_PRC_CI...

    sybase sql执行慢,如何调优

    1、执行下述代码,查看当前进程执行内容 ...SET NOCOUNT ON SET SHOWPLAN ON SET NOEXEC ON GO 具体代码 GO SET NOCOUNT OFF SET SHOWPLAN OFF SET NOEXEC OFF GO 4、执行计划显示索引使用不合理导致全表扫

    Sql学习第一天——SQL 练习题(建表/sql语句)

    建表: 代码如下: set nocount on –当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数 use SY GO if object_Id(‘dbo.Orders’) is not null drop ...

    instead of 触发器

    SET NOCOUNT ON IF (NOT EXISTS (SELECT P.SSN FROM Person P, inserted I WHERE P.SSN = I.SSN)) INSERT INTO Person SELECT SSN,Name,Address,Birthdate,Comment FROM inserted ELSE INSERT INTO ...

    Northwind脚本

    SET NOCOUNT ON GO USE master GO if exists (select * from sysdatabases where name='Northwind') drop database Northwind go DECLARE @device_directory NVARCHAR(520) SELECT @device_directory = ...

    在MySQL中同时查找两张表中的数据的示例

    这个例子里面我们从两个表中取出头两行,然后合并到一个表中。  在现实中我们常常会遇到这样的情况,... SET NOCOUNT ON --指示存储过程不返回查询影响的行数 DECLARE @col1c varchar(20),@col2c varchar(20), @inde

    sql 触发器使用例子

    inserted,deleted是在触发器中使用的两个临时表... 代码如下:set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER TRIGGER [dnt_user_add] ON [dbo].[dnt_users] AFTER INSERT AS BEGIN SET NOCOUNT ON; insert into

    如何查看SQLServer数据库每个表占用的空间大小

    CREATE PROCEDURE [dbo] [sys viewTableSpace] AS BEGIN SET NOCOUNT ON; CREATE TABLE [dbo] #tableinfo 表名 [varchar] 50 COLLATE Chinese PRC CI AS NULL 记录数 [int] NULL

    SqlServer GO命令循环使用实例代码

    SET NOCOUNT ON; GO INSERT INTO dbo.T1 DEFAULT VALUES; GO 100 总结 以上所述是小编给大家介绍的SqlServer GO命令循环使用实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。...

    ADO调用分页查询存储过程的实例讲解

    --set nocount on --开启SqlServer消息 go create proc usp_getMyStudentsDataByPage --输入参数 @pagesize int=7,--每页记录条数 @pageindex int=1,--当前要查看第几页的记录 --输出参数 @recordcount int output,-...

    CREATEHRDB.SQL

    是用与SQL Server 2005 set nocount on USE master declare @dttm varchar(55) select @dttm=convert(varchar,getdate(),113) raiserror('Starting installation of HR Database at %s ....',1,1,@dttm) with nowait

    百万级的分页存储过程

    百万级的分页存储过程 CREATE PROCEDURE sp_paging @sqlstr NVARCHAR(4000), --查询字符串 @currentpage INT, --第N页>=1 @pagesize INT --每页行数 ...SET NOCOUNT ON declare @P1 INT, --P1是游标的id

    sql server2005 分页存储过程

    SET NOCOUNT ON DECLARE @STMT nvarchar(max) -- SQL to execute ,@recct int -- total # of records (for GridView paging interface) IF LTRIM(RTRIM(@filter)) = '' SET @filter = '1 = 1' IF @pageSize IS ...

    SQL SERVER 数据库备份代码实例

    SET NOCOUNT ON DECLARE @d varchar(8) DECLARE @Backup_Flag NVARCHAR(10) SET @d=convert(varchar(8),getdate(),112) /***自定义选择备份哪些数据库****/ --SET @Backup_Flag='UserDB' -- 所用的用户数据库 SET @...

Global site tag (gtag.js) - Google Analytics