成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入講解游標類型為什么會產生數據檢索

運維 數據庫運維
數據檢索(data retrieval)是將經過選擇、整理和評價(鑒定)的數據存入某種載體中,并根據用戶需要從某種數據集合中檢索出能回答問題的準確數據過程或技術。那么游標類型為什么會產生數據檢索呢?

導讀:游標提供了一種對從表中檢索出的數據進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。本文將為大家深入講解游標類型為什么會產生數據檢索的問題。
游標類型產生的數據檢索問題:

  現象:

  在將數據庫兼容的級別從80改到90以后, 下文中的游標循環不出數據, 單獨SELECT卻會有結果:

  DECLARE MyCursor CURSOR LOCAL READ_ONLY
  FOR
  SELECT
  Col1
  FROM tbname WITH(NOLOCK)
  WHERE Name LIKE 'SNET%'
  AND B_Key IN(
  SELECT ***00)
  KeyID
  FROM tbmaster WITH(NOLOCK)
  WHERE Date >= '01/01/2007'
  AND Date < '02/01/2007')
  OPEN MyCursor
  FETCH NEXT FROM MYCURSOR
  WHILE (@@FETCH_STATUS=0)
  BEGIN
  FETCH NEXT FROM MYCURSOR
  END
  CLOSE MyCursor
  DEALLOCATE MyCursor


  原因:

  游標類型的問題。

  參照以上的定義, 游標類型是: DYNAMIC

 

 在定義此類游標的情況下, S鎖是必須下的, NOLOCK提示并不會起作用,此現象通過查詢游標OPEN時的sp_lock信息就可以觀察得到。它產生了IS和S鎖。

  而NOLOCK 提示是否起作用, 會影響的執行的結果(執行計劃一樣, 但在取數據的時候, 卻會有所差異)

  對于下面這句, 有NOLOCK 和無NOLOCK 時, 它取的數據是不一樣的, 因為它只取了***00, 而且沒有ORDER BY 來保證取數的順序, 所以取數據順序的細致差異, 就導致了最終結果的不同. 而最終結果的不同, 導致了整個游標取出來的數據不同。

  SELECT ***00)

  KeyID

  FROM tbmaster WITH(NOLOCK)

  WHERE Date >= '01/01/2007'

  AND Date < '02/01/2007')

  在游標定義SELECT 語句中, 當NOLOCK 有效時, 是可以取到數據的, 但NOLOCK 無效(DYNAMIC 游標導致)時, 查詢結果是無數據的

  所以最終看到的結果是: 游標循環不出來數據, 但只做查詢卻有數據。

  如果把游標定義中的查詢語句的NOLOCK 去掉做查詢, 也會沒有數據(與DYNAMIC 游標結果一致)

  故這個問題嚴格來說不應該是兼容級別的問題, 在80 級別下, 還是有可能發生, 只是機率更小, 或者是內部執行原理不太一樣, 導致沒有這種情況出來而已

  由于沒有ORDER BY來保證順序, 而有無NOLOCK的數據可能不會一樣, 所以80與90下都可能出現問題, 只是90會顯得比較突出, 或者僅僅時正好被發現了。

  解決方法如下:

  首先,需要把游標定義改成下面的,這樣不會導致NOLOCK 失效, 而且速度比原來的定義方式快得多. 如果游標一定要與原始表的數據變化關聯起來, 建議用KEYSET, 或者是去掉NOLOCK 提示(因為沒有意義), 假如對取的數據有要求, 我們還應當考慮加ORDER BY來保證取數順序:

  DECLARE MyCursor CURSOR LOCAL FORWARD_ONLY READ_ONLY STATIC

  FOR

以上就是我要為大家講解的關于深入講解游標類型為什么會產生數據檢索的全部內容,希望能夠對大家有所幫助。

【編輯推薦】

  1. oracle游標和游標變量的區別
  2. Oracle游標常用屬性
  3. sql server遍歷表不用游標和臨時表的方法
責任編輯:迎迎 來源: 賽迪網
相關推薦

2009-12-18 18:10:55

Fedora proc

2015-06-10 16:24:42

數據檢索

2009-11-09 09:34:07

WCF集合

2022-01-18 06:59:50

HashMap循環底層

2024-07-16 08:03:43

2024-07-08 12:44:11

2011-03-25 09:27:40

Oracle數據庫回滾前退

2023-09-08 09:53:41

API開發

2019-08-30 10:27:37

數據庫通信技術

2014-12-23 09:34:47

動態語言

2020-03-27 16:05:49

數據庫數據MySQL

2022-05-18 08:25:59

MySQLutf8字符集數據庫

2019-12-16 15:17:13

大數據信息安全數據庫

2024-01-24 09:00:00

2022-07-21 08:00:00

京東數據存儲汽車行業

2024-02-20 08:25:41

Redis內存數據庫Python

2025-05-23 08:26:11

2011-08-16 09:07:06

2021-01-18 14:34:59

冪等性接口客戶端

2012-03-26 10:26:43

openstackeucalyptus
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久免费精品国产免费高清 | 国产一级视频在线观看 | 亭亭五月激情 | 天天干 夜夜操 | 色资源在线 | 成人在线免费观看 | 激情毛片| 成人精品视频在线观看 | 久久久亚洲一区 | 久久噜噜噜精品国产亚洲综合 | 久久久久久免费精品一区二区三区 | 欧美亚洲国产日韩 | 天天看天天操 | 在线观看日韩精品视频 | 99九九视频 | 一区福利视频 | 7799精品视频天天看 | av激情影院 | 亚洲啊v在线 | 91欧美激情一区二区三区成人 | 欧美成人h版在线观看 | 午夜精品久久久久久久久久久久 | 国产福利在线播放麻豆 | 亚洲精品一 | aaaa网站| 亚洲精品电影网在线观看 | 国产乱码精品1区2区3区 | 色橹橹欧美在线观看视频高清 | 亚洲欧美一区二区三区1000 | 天天爽天天操 | 一区二区不卡 | 美女爽到呻吟久久久久 | 国产精品夜间视频香蕉 | 久久九精品 | 国产精品久久久久久婷婷天堂 | 中文字幕在线免费视频 | 成人av免费播放 | a黄视频| 中文字幕人成乱码在线观看 | 日本中文字幕一区 | 国产精品视频网站 |