日期:2011-05-02 15:21:00 来源:本站整理
SET NOCOUNT的用法和注意事项[MSSQL防范]
本文“SET NOCOUNT的用法和注意事项[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
查BOL:
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数).当 SET NOCOUNT 为 OFF 时,返回计数.
即便当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数.
当 SET NOCOUNT 为 ON 时,将不给客户端发送存储历程中的每个语句的 DONE_IN_PROC 信息.当利用 Microsoft? sql server? 供应的实用工具(QA)履行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)完毕时将不会在查询后果中显示"nn rows affected".
假如存储历程中包含的一些语句并不返回很多实际的数据,则该设置由于大量削减了网络流量,因此可明显提高性能.
SET NOCOUNT 设置是在履行或运行时设置,而不是在解析时设置.
假如存储历程中有多个语句,则默许情形下,SQL Server在每个语句完成时给客户端利用程序发送一条消息,具体阐明每个语句所影响的行数.大大都利用程序不需求这些消息.假如确信利用程序不需求他们,可以禁用这些消息,以提高傲速网络的性能.我们便可以通过SET NOCOUNT会话设置为利用程序禁用这些消息.(其实大部份利用程序都不需求这个值)
需求注意的是:
1.存储历程:
象create table返回了记录集,并且连insert into语句也返回了记录集,不过该记录集得一种分外的记录集(没有字段,不能对该记录集举行任何操作), OLEDB和ODBC存在一个很大的差别,向odbc取记录集时,odbc过滤了上面所称的特别记录集(那种只占位置但不能举行任何操作的记录集——多由create table或insert into产生),而向oledb取记录集时,oledb并没有将特别记录集过滤.所以在利用存储历程返回记录集时,在不但愿返回记录的地方,应当利用set nocount on禁止存储历程返回记录集,不然大概会绕很多弯路.
2.触发器:
????倡议不要让触发器返回任何后果.这是因为对这些返回后果的特别处理必须写入每个答应对触发器表举行改正的利用程序中.为了禁止从触发器返回任何后果,不要在触发器内定义包含SELECT语句或变量赋值.假如必须在触发器中举行变量赋值,则应当在触发器的开首利用SET NOCOUNT ON语句以避免返回任何后果集.
????本日我就碰到了触发器返回后果集,造成对触发器表删除出错,假如是删除一条记录可以,多条则不行,提醒:Key column information si insufficient or incorrect.Too many rows were affected by updat
以上是“SET NOCOUNT的用法和注意事项[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论