触发器使表格和交叉数据库之间自动同步变得更容易。但是其性能可能会受到很大的影响。这里我将指出一个能减少这种无法预料问题影响的命令。例如,当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 NOCOUNT为OFF时,返回计数。
当SET NOCOUNT为 ON时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft SQL Server 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"n rows affected"。
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
SET NOCOUNT设置是在执行或运行时设置,而不是在分析时设置。
权限
SET NOCOUNT 权限默认授予所有用户。
分享到:
相关推荐
使用 SET NOCOUNT ON 可以提高 T-SQL 代码速度的现象。这个命令允许你禁止所有在你的会话事务中的子查询的信息,直到你发出 SET NOCOUNT OFF。这个选项不只在于其输出的装饰效果。它减少了从服务器端到客户端传递的...
1. **使用SET NOCOUNT ON选项**: 当在存储过程中使用SELECT语句时,SQL Server默认会返回受影响的行数。通过设置SET NOCOUNT ON,可以关闭这个返回,减少不必要的网络通信,从而提高性能。 2. **使用确定的Schema...
* SET NOCOUNT ON 语句:使用 SET NOCOUNT ON 语句来提高查询性能。 * 模糊查询 Like 语句:使用模糊查询 Like 语句来提高查询性能。 * 不要在 Where 子句关联字段上使用函数:避免在 Where 子句关联字段上使用函数...
1. 使用 SET NOCOUNT ON 语句来禁用消息输出,以避免干扰 SELECT 语句的执行。 2. 使用 DECLARE 语句来声明变量 @sql、@table 和 @column,分别用来存储动态 SQL 语句、表名和列名。 3. 使用 CREATE TABLE 语句来...
2. SET NOCOUNT ON和触发器的使用:为了避免上述问题,可以通过编程方式,使用SET NOCOUNT ON语句先关闭SQL Server返回的行计数信息,然后执行INSERT语句,并立即检索@@IDENTITY值。此外,还可以创建一个触发器,在...
- **使用SET NOCOUNT ON**:当执行存储过程或批处理时,关闭每条SQL语句的结果反馈,可以减少网络传输开销,提高性能。 - **编程查询单条SQL语句的执行时间**:通过记录SQL语句执行前后的时间戳,可以精确测量单个...
在需要在触发器中进行变量赋值时,可以使用SET NOCOUNT ON来防止返回行计数,以提高性能。 总的来说,SQL Server的存储过程和触发器是数据库设计和管理的重要工具,它们能够提升代码复用性、提高效率,同时也可以...
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 ...
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 ...
- **执行计划分析**:通过查询执行计划可以观察到,对于特定条件的查询,SQL Server 2008能够直接使用相应的筛选索引来获取数据,而无需扫描整个表。这意味着对于某些特定类型的查询,筛选索引可以显著提高查询性能...
SET NOCOUNT ON; DECLARE @EditType NVARCHAR(100); SET @EditType = 'ADD'; DECLARE @ForNum INT; SET @ForNum = 1; DECLARE @L_id NVARCHAR(50), @L_name NVARCHAR(50); -- 解析参数并插入数据 ...
1、执行下述代码,查看当前进程执行内容 ...SET NOCOUNT ON SET SHOWPLAN ON SET NOEXEC ON GO 具体代码 GO SET NOCOUNT OFF SET SHOWPLAN OFF SET NOEXEC OFF GO 4、执行计划显示索引使用不合理导致全表扫
SET NOCOUNT ON; DECLARE @timediff DATETIME; DECLARE @sql NVARCHAR(500); SELECT @timediff = GETDATE(); SET @sql = 'SELECT TOP ' + STR(@pageSize) + ' * FROM tb_TestTable WHERE (ID NOT IN (SELECT ...
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 ...
- `SET NOCOUNT ON` 和 `SET NOCOUNT OFF` 是为了控制是否返回行计数信息,这在实际应用中可以提高效率。 #### 2. `INSERT INTO SELECT FROM` `INSERT INTO SELECT FROM`语句则是在已存在的表中插入数据。这种...
SET NOCOUNT ON; DECLARE @sql NVARCHAR(MAX) = 'DELETE FROM xxx WHERE id IN (' + @idList + ')' EXEC sp_executesql @sql END ``` 在这个例子中,`@idList`应该是一个由逗号分隔的值列表,如'1,2,3,4'。调用...
一种更高效的替代方案是在 `INSERT` 操作之前设置 `SET NOCOUNT ON` 并且在 `INSERT` 之后立即执行 `SELECT @@IDENTITY`,这样可以减少不必要的网络往返次数,并提高整体性能。 #### 示例代码: ```sql SET NOCOUNT...
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 = ...
在需要精确控制行数的情况下,需要避免使用`SET NOCOUNT ON`或者在需要时手动重置。 9. **使用`DECLARE`声明变量**:在循环中使用`DECLARE`声明变量`@TempRowCount`,可以确保每次循环开始时,变量的值被正确初始化...
这个例子里面我们从两个表中取出头两行,然后合并到一个表中。 在现实中我们常常会遇到这样的情况,... SET NOCOUNT ON --指示存储过程不返回查询影响的行数 DECLARE @col1c varchar(20),@col2c varchar(20), @inde