知识大全 深入讲解游标类型为什么会产生数据检索[2]

Posted

篇首语:大鹏一日同风起,扶摇直上九万里。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 深入讲解游标类型为什么会产生数据检索[2]相关的知识,希望对你有一定的参考价值。

  在定义此类游标的情况下 S锁是必须下的 NOLOCK提示并不会起作用 此现象通过查询游标OPEN时的sp_lock信息就可以观察得到 它产生了IS和S锁

  而NOLOCK 提示是否起作用 会影响的执行的结果(执行计划一样 但在取数据的时候 却会有所差异)

  对于下面这句 有NOLOCK 和无NOLOCK 时 它取的数据是不一样的 因为它只取了TOP 而且没有ORDER BY 来保证取数的顺序 所以取数据顺序的细致差异 就导致了最终结果的不同 而最终结果的不同 导致了整个游标取出来的数据不同

  SELECT TOP( )  KeyID  FROM tbmaster WITH(NOLOCK)  WHERE Date >= / /   AND Date < / / )

  在游标定义SELECT 语句中 当NOLOCK 有效时 是可以取到数据的 但NOLOCK 无效(DYNAMIC 游标导致)时 查询结果是无数据的

  所以最终看到的结果是: 游标循环不出来数据 但只做查询却有数据

  如果把游标定义中的查询语句的NOLOCK 去掉做查询 也会没有数据(与DYNAMIC 游标结果一致)

  故这个问题严格来说不应该是兼容级别的问题 在 级别下 还是有可能发生 只是机率更小 或者是内部执行原理不太一样 导致没有这种情况出来而已

  由于没有ORDER BY来保证顺序 而有无NOLOCK的数据可能不会一样 所以 与 下都可能出现问题 只是 会显得比较突出 或者仅仅时正好被发现了

  解决方法如下:

  首先 需要把游标定义改成下面的 这样不会导致NOLOCK 失效 而且速度比原来的定义方式快得多 如果游标一定要与原始表的数据变化关联起来 建议用KEYSET 或者是去掉NOLOCK 提示(因为没有意义) 假如对取的数据有要求 我们还应当考虑加ORDER BY来保证取数顺序

  DECLARE MyCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY STATIC  FOR

cha138/Article/program/SQL/201311/16194

相关参考

知识大全 实例讲解如何正确使用数据库游标

  在下面的示例中表className中有如下分类  具体示例  classIDclassName  衣服  裤子  帽子  鞋子  表productInfo有如下记录  productIDprodu

知识大全 用一个实例讲解DB2数据库游标循环的问题

用一个实例讲解DB2数据库游标循环的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文中的

知识大全 Oracle数据库游标的类型

Oracle数据库游标的类型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  游标是SQL的一个内

知识大全 讲解SQL SERVER中易混淆的数据类型[2]

讲解SQLSERVER中易混淆的数据类型[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  B

知识大全 实践证明在数据库中使用游标效果会更好

  在数据库中有两个表一个比较巨大大约千万条记录(表Big)另一个只有条(表small)  目前需要根据表small来更新表Big  UPDATEBigSETBf=WHEREBigIdIN(SELEC

知识大全 讲解SQL SERVER中易混淆的数据类型[8]

讲解SQLSERVER中易混淆的数据类型[8]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (

知识大全 讲解SQL SERVER中易混淆的数据类型[7]

讲解SQLSERVER中易混淆的数据类型[7]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (

知识大全 讲解SQL SERVER中易混淆的数据类型[3]

讲解SQLSERVER中易混淆的数据类型[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (

知识大全 讲解SQL SERVER中易混淆的数据类型[1]

讲解SQLSERVER中易混淆的数据类型[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数

知识大全 讲解SQL SERVER中易混淆的数据类型[6]

讲解SQLSERVER中易混淆的数据类型[6]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  例