成人免费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

數據檢索

2022-01-18 06:59:50

HashMap循環底層

2009-11-09 09:34:07

WCF集合

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

數據庫通信技術

2020-03-27 16:05:49

數據庫數據MySQL

2014-12-23 09:34:47

動態語言

2022-05-18 08:25:59

MySQLutf8字符集數據庫

2019-12-16 15:17:13

大數據信息安全數據庫

2022-07-21 08:00:00

京東數據存儲汽車行業

2024-01-24 09: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

冪等性接口客戶端

2021-01-25 07:14:53

Cloud DevOps云計算
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中日韩av | 成人一区二区在线 | 亚洲高清成人在线 | 在线观看国产视频 | 国产一区 | 欧美精品综合在线 | 成人欧美一区二区三区黑人孕妇 | 日韩欧美中文字幕在线观看 | 亚洲国产欧美一区二区三区久久 | 免费黄色片在线观看 | 99综合| 狠狠色综合久久丁香婷婷 | 九九综合| 成人性视频免费网站 | 精品熟人一区二区三区四区 | www.亚洲一区 | 日韩欧美在线播放 | 一区二区三区av | 欧美精品一区二区三区四区五区 | 日韩视频精品 | 久久精品国产一区二区三区 | 国产在视频一区二区三区吞精 | 草樱av| 蜜桃免费一区二区三区 | 男人久久天堂 | 99久久中文字幕三级久久日本 | 亚洲精品黄 | 欧美日韩中文国产一区发布 | 欧美精品一区二区三区在线播放 | 美女拍拍拍网站 | 国产精品一区二区在线 | 国产美女一区二区 | 久久精品 | 在线免费小视频 | 日本又色又爽又黄又高潮 | 亚洲国产欧美国产综合一区 | 99精品视频在线观看 | 91不卡 | 国产在线播 | 中文字幕一区二区三区四区五区 | 久久伊人免费视频 |