SQL Server中nocount详解
EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。setnocounton是什麼意义。我想請問一下:setnocounton是什麼意义,為什麼良多的storedprocedures的第一行都有遮一句話??多謝!!!
每次我们在利用查询剖析器调试SQL语句的时分,一般会看到一些信息,提示我们以后有几个行遭到了影响,这是些甚么信息?在我们挪用的时分这些信息有效吗?是不是能够封闭呢?
谜底是这些信息在我们的客户真个使用程序中是没有效的,这些信息是存储过程当中的每一个语句的DONE_IN_PROC信息。
我们能够使用SETNOCOUNT来把持这些信息,以到达进步程序功能的目标。
MSDN中匡助以下:
SETNOCOUNT
使前往的了局中不包括有关受Transact-SQL语句影响的行数的信息。
语法
SETNOCOUNT{ON|OFF}
正文
当SETNOCOUNT为ON时,不前往计数(暗示受Transact-SQL语句影响的行数)。当SETNOCOUNT为OFF时,前往计数。
即便当SETNOCOUNT为ON时,也更新@@ROWCOUNT函数。
当SETNOCOUNT为ON时,将不给客户端发送存储过程当中的每一个语句的DONE_IN_PROC信息。当利用MicrosoftSQLServer供应的有用工具实行查询时,在Transact-SQL语句(如select、_insert、_update和_delete)停止时将不会在查询了局中显现"nnrowsaffected"。
假如存储过程当中包括的一些语句其实不前往很多实践的数据,则该设置因为大批削减了收集流量,因而可明显进步功能。
SETNOCOUNT设置是在实行或运转时设置,而不是在剖析时设置。
权限
SETNOCOUNT权限默许授与一切用户。
结论:我们应当在存储历程的头部加上SETNOCOUNTON如许的话,在加入存储历程的时分加上SETNOCOUNTOFF如许的话,以到达优化存储历程的目标。
多说两句:
1:在检察SqlServer的匡助的时分,要注重“权限”这一节,由于某些语句是必要必定的权限的,而我们常常疏忽。
2:@@ROWCOUNT是前往受上一语句影响的行数,包含找到纪录的数量、删除的行数、更新的纪录数等,不要以为只是前往查找的纪录数量,并且@@ROWCOUNT要紧跟必要判别语句,不然@@ROWCOUNT将前往0。
3:假如利用表变量,在前提表达式中要利用别号来替换表名,不然体系会报错。
4:在CUD类的操纵中必定要有事件处置。
5:利用毛病处置程序,用来反省@@ERROR体系函数的T-SQL语句(IF)实践上在历程中扫除了@@ERROR值,没法再捕捉除零以外的任何值,必需利用SET或select当即捕捉毛病代码。
MySQL的海豚标志的名字叫“sakila”,它是由MySQLAB的创始人从用户在“海豚命名”的竞赛中建议的大量的名字表中选出的。获胜的名字是由来自非洲斯威士兰的开源软件开发者AmbroseTwebaze提供。 如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。 索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。 这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片? 对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。 在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。 大家注意一点。如下面的例子: 不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理? 可以动态传入参数,省却了动态SQL的拼写。
页:
[1]