日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

sql server 2000 游標(biāo)用法小例

瀏覽:219日期:2023-11-02 09:47:59

SqlServer 2000 游標(biāo)用法小例 翻彈押尾桑Cannon(卡儂) » --------------------------------------------------------------------------------

DECLARE CURSOR (T-SQL)創(chuàng)建游標(biāo) September 14th, 2006 by OoperMan; (1 votes, average: 5 out of 5) Loading ...SQL Server 2005 聯(lián)機(jī)叢書 DECLARE CURSOR (Transact-SQL)更新日期: 2005 年 12 月 5 日

定義 Transact-SQL 服務(wù)器游標(biāo)的屬性,例如游標(biāo)的滾動行為和用于生成游標(biāo)所操作的結(jié)果集的查詢。DECLARE CURSOR 接受基于 SQL-92 標(biāo)準(zhǔn)的語法和使用一組 Transact-SQL 擴(kuò)展插件的語法。

Transact-SQL 語法約定

語法

SQL 92 Syntax DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR; FOR select_statement; [ FOR ...{ READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ] [;] Transact-SQL Extended Syntax DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] [ FORWARD_ONLY | SCROLL ] [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] [ TYPE_WARNING ] FOR select_statement; [ FOR UPDATE [ OF column_name [ ,...n ] ] ] [;]

參數(shù)

cursor_name所定義的 Transact-SQL 服務(wù)器游標(biāo)的名稱。cursor_name 必須符合標(biāo)識符規(guī)則。有關(guān)標(biāo)識符規(guī)則的詳細(xì)信息,請參閱使用標(biāo)識符作為對象名稱。

INSENSITIVE定義一個游標(biāo),以創(chuàng)建將由該游標(biāo)使用的數(shù)據(jù)的臨時復(fù)本。對游標(biāo)的所有請求都從 tempdb 中的這一臨時表中得到應(yīng)答;因此,在對該游標(biāo)進(jìn)行提取操作時返回的數(shù)據(jù)中不反映對基表所做的修改,并且該游標(biāo)不允許修改。使用 SQL-92 語法時,如果省略 INSENSITIVE,則已提交的(任何用戶)對基礎(chǔ)表的刪除和更新都反映在后面的提取中。

SCROLL指定所有的提取選項(FIRST、LAST、PRIOR、NEXT、RELATIVE、ABSOLUTE)均可用。如果未在 SQL-92 DECLARE CURSOR 中指定 SCROLL,則 NEXT 是唯一支持的提取選項。如果也指定了 FAST_FORWARD,則不能指定 SCROLL。

select_statement定義游標(biāo)結(jié)果集的標(biāo)準(zhǔn) SELECT 語句。在游標(biāo)聲明的 select_statement 內(nèi)不允許使用關(guān)鍵字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO。

Microsoft 如果 select_statement 中的子句與所請求的游標(biāo)類型的功能有沖突,則 SQL Server 會將游標(biāo)隱式轉(zhuǎn)換為其他類型。有關(guān)詳細(xì)信息,請參閱使用隱式游標(biāo)轉(zhuǎn)換。

READ ONLY禁止通過該游標(biāo)進(jìn)行更新。在 UPDATE 或 DELETE 語句的 WHERE CURRENT OF 子句中不能引用游標(biāo)。該選項優(yōu)于要更新的游標(biāo)的默認(rèn)功能。

UPDATE [OF column_name [,…n]]定義游標(biāo)中可更新的列。如果指定了 OF column_name [,…n],則只允許修改列出的列。如果指定了 UPDATE,但未指定列的列表,則可以更新所有列。

cursor_name所定義的 Transact-SQL 服務(wù)器游標(biāo)的名稱。cursor_name 必須符合標(biāo)識符規(guī)則。有關(guān)標(biāo)識符規(guī)則的詳細(xì)信息,請參閱使用標(biāo)識符作為對象名稱。

LOCAL指定對于在其中創(chuàng)建的批處理、存儲過程或觸發(fā)器來說,該游標(biāo)的作用域是局部的。該游標(biāo)名稱僅在這個作用域內(nèi)有效。在批處理、存儲過程、觸發(fā)器或存儲過程 OUTPUT 參數(shù)中,該游標(biāo)可由局部游標(biāo)變量引用。OUTPUT 參數(shù)用于將局部游標(biāo)傳遞回調(diào)用批處理、存儲過程或觸發(fā)器,它們可在存儲過程終止后給游標(biāo)變量分配參數(shù)使其引用游標(biāo)。除非 OUTPUT 參數(shù)將游標(biāo)傳遞回來,否則游標(biāo)將在批處理、存儲過程或觸發(fā)器終止時隱式釋放。如果 OUTPUT 參數(shù)將游標(biāo)傳遞回來,則游標(biāo)在最后引用它的變量釋放或離開作用域時釋放。

GLOBAL指定該游標(biāo)的作用域?qū)碚f連接是全局的。在由連接執(zhí)行的任何存儲過程或批處理中,都可以引用該游標(biāo)名稱。該游標(biāo)僅在斷開連接時隱式釋放。

注意:如果 GLOBAL 和 LOCAL 參數(shù)都未指定,則默認(rèn)值由 default to local cursor 數(shù)據(jù)庫選項的設(shè)置控制。在 SQL Server 7.0 版中,該選項默認(rèn)為 FALSE,以便與 SQL Server 的早期版本相匹配,在早期版本中,所有游標(biāo)都是全局的。該選項的默認(rèn)值在以后的 SQL Server 版本中可能會更改。有關(guān)詳細(xì)信息,請參閱“設(shè)置數(shù)據(jù)庫選項”。

FORWARD_ONLY指定游標(biāo)只能從第一行滾動到最后一行。FETCH NEXT 是唯一支持的提取選項。如果在指定 FORWARD_ONLY 時不指定 STATIC、KEYSET 和 DYNAMIC 關(guān)鍵字,則游標(biāo)作為 DYNAMIC 游標(biāo)進(jìn)行操作。如果 FORWARD_ONLY 和 SCROLL 均未指定,則除非指定 STATIC、KEYSET 或 DYNAMIC 關(guān)鍵字,否則默認(rèn)為 FORWARD_ONLY。STATIC、KEYSET 和 DYNAMIC 游標(biāo)默認(rèn)為 SCROLL。與 ODBC 和 ADO 這類數(shù)據(jù)庫 API 不同,STATIC、KEYSET 和 DYNAMIC Transact-SQL 游標(biāo)支持 FORWARD_ONLY。

STATIC定義一個游標(biāo),以創(chuàng)建將由該游標(biāo)使用的數(shù)據(jù)的臨時復(fù)本。對游標(biāo)的所有請求都從 tempdb 中的這一臨時表中得到應(yīng)答;因此,在對該游標(biāo)進(jìn)行提取操作時返回的數(shù)據(jù)中不反映對基表所做的修改,并且該游標(biāo)不允許修改。

KEYSET指定當(dāng)游標(biāo)打開時,游標(biāo)中行的成員身份和順序已經(jīng)固定。對行進(jìn)行唯一標(biāo)識的鍵集內(nèi)置在 tempdb 內(nèi)一個稱為 keyset 的表中。

注意:如果查詢引用了至少一個無唯一索引的表,則鍵集游標(biāo)將轉(zhuǎn)換為靜態(tài)游標(biāo)。

對基表中的非鍵值所做的更改(由游標(biāo)所有者更改或由其他用戶提交)可以在用戶滾動游標(biāo)時看到。其他用戶執(zhí)行的插入是不可見的(不能通過 Transact-SQL 服務(wù)器游標(biāo)執(zhí)行插入)。如果刪除行,則在嘗試提取行時返回值為 -2 的 @@FETCH_STATUS。從游標(biāo)以外更新鍵值類似于刪除舊行然后再插入新行。具有新值的行是不可見的,并在嘗試提取具有舊值的行時,將返回值為 -2 的 @@FETCH_STATUS。如果通過指定 WHERE CURRENT OF 子句利用游標(biāo)來完成更新,則新值是可見的。

DYNAMIC定義一個游標(biāo),以反映在滾動游標(biāo)時對結(jié)果集內(nèi)的各行所做的所有數(shù)據(jù)更改。行的數(shù)據(jù)值、順序和成員身份在每次提取時都會更改。動態(tài)游標(biāo)不支持 ABSOLUTE 提取選項。

FAST_FORWARD指定啟用了性能優(yōu)化的 FORWARD_ONLY、READ_ONLY 游標(biāo)。如果指定了 SCROLL 或 FOR_UPDATE,則不能也指定 FAST_FORWARD。

注意:在 SQL Server 2000 中,F(xiàn)AST_FORWARD 和 FORWARD_ONLY 游標(biāo)選項是互相排斥的。如果指定了二者,則會引發(fā)錯誤。在 SQL Server 2005 中,這兩個關(guān)鍵字可以用在同一個 DECLARE CURSOR 語句中。

READ_ONLY禁止通過該游標(biāo)進(jìn)行更新。在 UPDATE 或 DELETE 語句的 WHERE CURRENT OF 子句中不能引用游標(biāo)。該選項優(yōu)于要更新的游標(biāo)的默認(rèn)功能。

SCROLL_LOCKS指定通過游標(biāo)進(jìn)行的定位更新或刪除保證會成功。將行讀取到游標(biāo)中以確保它們對隨后的修改可用時,Microsoft SQL Server 將鎖定這些行。如果還指定了 FAST_FORWARD 或 STATIC,則不能指定 SCROLL_LOCKS。

OPTIMISTIC指定如果行自從被讀入游標(biāo)以來已得到更新,則通過游標(biāo)進(jìn)行的定位更新或定位刪除不會成功。當(dāng)將行讀入游標(biāo)時 SQL Server 不會鎖定行。相反,SQL Server 使用 timestamp 列值的比較,或者如果表沒有 timestamp 列,則使用校驗和值,以確定將行讀入游標(biāo)后是否已修改該行。如果已修改該行,則嘗試進(jìn)行的定位更新或刪除將失敗。如果還指定了 FAST_FORWARD,則不能指定 OPTIMISTIC。

TYPE_WARNING指定如果游標(biāo)從所請求的類型隱式轉(zhuǎn)換為另一種類型,則向客戶端發(fā)送警告消息。

select_statement定義游標(biāo)結(jié)果集的標(biāo)準(zhǔn) SELECT 語句。在游標(biāo)聲明的 select_statement 內(nèi)不允許使用關(guān)鍵字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO。

注意:您可以在游標(biāo)聲明中使用查詢提示;但是,如果還使用 FOR UPDATE OF 子句,則請在 FOR UPDATE OF 之后指定 OPTION (query_hint)。

如果 select_statement 中的子句與所請求的游標(biāo)類型的功能有沖突,則 SQL Server 會將游標(biāo)隱式轉(zhuǎn)換為其他類型。有關(guān)詳細(xì)信息,請參閱“隱式游標(biāo)轉(zhuǎn)換”。

FOR UPDATE [OF column_name [,…n]]定義游標(biāo)中可更新的列。如果提供了 OF column_name [,…n],則只允許修改列出的列。如果指定了 UPDATE,但未指定列的列表,則除非指定了 READ_ONLY 并發(fā)選項,否則可以更新所有的列。

備注

DECLARE CURSOR 定義 Transact-SQL 服務(wù)器游標(biāo)的屬性,例如游標(biāo)的滾動行為和用于生成游標(biāo)所操作的結(jié)果集的查詢。OPEN 語句填充結(jié)果集,F(xiàn)ETCH 從結(jié)果集返回行。CLOSE 語句釋放與游標(biāo)關(guān)聯(lián)的當(dāng)前結(jié)果集。DEALLOCATE 語句釋放游標(biāo)所使用的資源。

DECLARE CURSOR 語句的第一種格式使用 SQL-92 語法聲明游標(biāo)行為。DECLARE CURSOR 的第二種格式使用 Transact-SQL 擴(kuò)展插件,這些擴(kuò)展插件允許您使用在 ODBC 或 ADO 的數(shù)據(jù)庫 API 游標(biāo)函數(shù)中所使用的相同游標(biāo)類型來定義游標(biāo)。

不能混淆這兩種格式。如果在 CURSOR 關(guān)鍵字的前面指定 SCROLL 或 INSENSITIVE 關(guān)鍵字,則不能在 CURSOR 和 FOR select_statement 關(guān)鍵字之間使用任何關(guān)鍵字。如果在 CURSOR 和 FOR select_statement 關(guān)鍵字之間指定任何關(guān)鍵字,則不能在 CURSOR 關(guān)鍵字的前面指定 SCROLL 或 INSENSITIVE。

如果使用 Transact-SQL 語法的 DECLARE CURSOR 不指定 READ_ONLY、OPTIMISTIC 或 SCROLL_LOCKS,則默認(rèn)值如下:

如果 SELECT 語句不支持更新(由于權(quán)限不夠、訪問的遠(yuǎn)程表不支持更新等等),則游標(biāo)為 READ_ONLY。

STATIC 和 FAST_FORWARD 游標(biāo)默認(rèn)為 READ_ONLY。

DYNAMIC 和 KEYSET 游標(biāo)默認(rèn)為 OPTIMISTIC。

游標(biāo)名稱只能被其他 Transact-SQL 語句引用。它們不能被數(shù)據(jù)庫 API 函數(shù)引用。例如,聲明游標(biāo)之后,不能通過 OLE DB、ODBC 或 ADO 函數(shù)或方法引用游標(biāo)名稱。不能使用提取函數(shù)或 API 的方法來提取游標(biāo)行;只能通過 Transact-SQL FETCH 語句提取這些行。

在聲明游標(biāo)后,可使用下列系統(tǒng)存儲過程確定游標(biāo)的特性。

系統(tǒng)存儲過程 說明sp_cursor_list返回當(dāng)前在連接上可視的游標(biāo)列表及其特性。

sp_describe_cursor說明游標(biāo)屬性,例如是只前推的游標(biāo)還是滾動游標(biāo)。

sp_describe_cursor_columns說明游標(biāo)結(jié)果集中的列的屬性。

sp_describe_cursor_tables說明游標(biāo)所訪問的基表。

在聲明游標(biāo)的 select_statement 中可以使用變量。游標(biāo)變量值在聲明游標(biāo)后不發(fā)生更改。在 SQL Server 版本 6.5 以及早期版本中,每次重新打開游標(biāo)時都會重新刷新變量值。

權(quán)限

默認(rèn)情況下,將 DECLARE CURSOR 權(quán)限授予對游標(biāo)中所使用的視圖、表和列具有 SELECT 權(quán)限的任何用戶。

示例

A. 使用簡單游標(biāo)和語法

在打開該游標(biāo)時所生成的結(jié)果集包括表中的所有行和所有列。可以更新該游標(biāo),對該游標(biāo)所做的所有更新和刪除均在提取中表現(xiàn)出來。因為未指定 SCROLL 選項,所以 FETCH NEXT 是唯一可用的提取選項。

DECLARE vend_cursor CURSOR FOR SELECT * FROM Purchasing.Vendor OPEN vend_cursor FETCH NEXT FROM vend_cursorB. 使用嵌套游標(biāo)生成報表輸出

以下示例顯示如何嵌套游標(biāo)以生成復(fù)雜的報表。為每個供應(yīng)商聲明內(nèi)部游標(biāo)。

SET NOCOUNT ON DECLARE @vendor_id int, @vendor_name nvarchar(50), @message varchar(80), @product nvarchar(50) PRINT '-------- Vendor Products Report --------' DECLARE vendor_cursor CURSOR FOR; SELECT VendorID, Name FROM Purchasing.Vendor WHERE PreferredVendorStatus = 1 ORDER BY VendorID OPEN vendor_cursor FETCH NEXT FROM vendor_cursor; INTO @vendor_id, @vendor_name WHILE @@FETCH_STATUS = 0 BEGIN PRINT ' ' SELECT @message = '----- Products From Vendor: ' + @vendor_name PRINT @message -- Declare an inner cursor based-- on vendor_id from the outer cursor. DECLARE product_cursor CURSOR FOR; SELECT v.Name FROM Purchasing.ProductVendor pv, Production.Product v WHERE pv.ProductID = v.ProductID AND pv.VendorID = @vendor_id-- Variable value from the outer cursor OPEN product_cursor FETCH NEXT FROM product_cursor INTO @product IF @@FETCH_STATUS <> 0; PRINT ' <<None>>';; WHILE @@FETCH_STATUS = 0 BEGIN SELECT @message = ' ' + @product PRINT @message FETCH NEXT FROM product_cursor INTO @product END CLOSE product_cursor DEALLOCATE product_cursor -- Get the next vendor. FETCH NEXT FROM vendor_cursor; INTO @vendor_id, @vendor_name END; CLOSE vendor_cursor DEALLOCATE vendor_cursor

標(biāo)簽: Sql Server 數(shù)據(jù)庫
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久天堂成人| 国产精品一区二区美女视频免费看| 亚洲激情社区| 日韩精品久久久久久久电影99爱| 久久精品伊人| 精品国产精品国产偷麻豆 | 秋霞影视一区二区三区| 成人一二三区| 久久三级中文| 欧美韩日一区| 91精品福利| 婷婷亚洲五月色综合| 国产午夜精品一区二区三区欧美| 成人午夜网址| 国产精品7m凸凹视频分类| 久久国产高清| 国产日韩欧美高清免费| 精品视频在线一区二区在线| а√天堂8资源在线| 女同性一区二区三区人了人一| 国产精品美女| 国产精品一二| 捆绑调教日本一区二区三区| 日韩视频中文| 911精品国产| 国产精选在线| 午夜在线一区二区| 国产欧美一区二区三区精品观看 | 亚洲香蕉视频| 久久99国产精品视频| 午夜精品网站| 国产一卡不卡| 久久91导航| 亚洲专区视频| 国产一区二区三区网| 亚洲欧美日韩在线观看a三区| 国产亚洲一区二区三区啪| 久久久亚洲一区| 欧美在线首页| 一区二区亚洲精品| 国产精品白浆| 香蕉成人av| 视频一区中文字幕精品| 久久久久久久欧美精品| 另类国产ts人妖高潮视频| 日韩av一级片| 欧美.日韩.国产.一区.二区 | 精品国产乱码久久久久久樱花 | 欧美精品1区| 欧美美女一区| 国产精品网址| 日韩午夜精品| 日韩激情一区| 日韩国产欧美一区二区三区| 久久激情婷婷| 你懂的国产精品永久在线| 欧美日韩国产探花| 精品三级久久久| 亚洲精品福利| 99国产精品久久久久久久成人热| 日本 国产 欧美色综合| 97精品国产| 国产伦精品一区二区三区千人斩| 国产主播一区| 国产一区丝袜| 91欧美极品| 99riav国产精品| 蜜桃视频在线网站| 久久中文欧美| 久久国内精品视频| 三级一区在线视频先锋| 亚洲午夜在线| 国产在线看片免费视频在线观看| 国产精品99久久免费观看| 亚洲人成在线影院| 三级小说欧洲区亚洲区| 国内自拍视频一区二区三区| 日本不卡一区二区三区| 国产农村妇女精品一区二区| 久久精品国语| 新版的欧美在线视频| 精品一区二区三区免费看 | 久久爱www成人| 色8久久久久| 老司机久久99久久精品播放免费| 亚洲调教视频在线观看| 国产福利一区二区三区在线播放| 视频一区中文字幕精品| 亚洲一区二区三区久久久| 久久美女精品| 中文在线а√天堂| 精品三级在线观看视频| 久久久久亚洲精品中文字幕| 国产欧美另类| 国产日韩欧美在线播放不卡| 欧美午夜三级| 国产精品xxx| 美女在线视频一区| 国产精品一区亚洲| 国产精品毛片aⅴ一区二区三区| 日韩国产在线观看一区| 黑丝一区二区三区| 99亚洲视频| 老司机精品久久| 久久aⅴ国产紧身牛仔裤| 伊人久久婷婷| 影视先锋久久| 亚洲一区欧美激情| 丝袜脚交一区二区| 天堂va在线高清一区| 日本va欧美va瓶| 欧美精品三级在线| 国产欧美欧美| 福利一区在线| 亚洲综合在线电影| 99tv成人| 欧美日韩国产免费观看视频| 黄色精品网站| 亚久久调教视频| 国产精品极品国产中出| 精品淫伦v久久水蜜桃| 999国产精品视频| 悠悠资源网久久精品| 亚洲三级在线| 国产精品三p一区二区| 激情国产在线| 在线视频精品| 亚洲日产av中文字幕| 国产精品一区二区精品| 97在线精品| 国产亚洲在线观看| 久久亚洲风情| 91成人精品在线| 日产精品一区二区| 亚洲国产专区| 日韩国产精品久久久| 国产精品精品| 亚洲免费激情| 911精品国产| 久久久久国产一区二区| 久久亚洲二区| 乱一区二区av| 亚洲欧美综合| 国产麻豆一区二区三区精品视频| 国产一区二区三区亚洲综合| 激情欧美亚洲| 亚洲最新av| 热三久草你在线| 中文字幕日韩欧美精品高清在线| 国产欧美91| 国产一区亚洲| 久久夜色精品| 国产96在线亚洲| 亚洲欧美久久久| 老司机免费视频一区二区| 欧美在线亚洲综合一区| 国产精品超碰| 蜜臀av性久久久久蜜臀aⅴ四虎| 精品中文在线| 亚洲精品韩国| 久久影视一区| 日韩一区免费| 婷婷亚洲综合| 国产va免费精品观看精品视频| 一区二区三区网站| 香蕉成人av| 麻豆精品少妇| 日韩不卡手机在线v区| 欧美中文字幕一区二区| 精品亚洲二区| 日韩在线黄色| 激情综合激情| 亚洲深夜视频| 国产午夜久久av| 午夜一级久久| 亚洲高清二区| 狂野欧美性猛交xxxx| 亚洲精品在线国产| 激情久久婷婷| 日韩在线观看一区| 国产精品对白久久久久粗| 亚洲精品无吗| 狠狠久久婷婷| 欧美va天堂在线| 国产美女高潮在线| 欧美aⅴ一区二区三区视频| 蜜桃91丨九色丨蝌蚪91桃色| 99久久99视频只有精品| 色在线中文字幕| 久久香蕉网站| 91成人在线精品视频| 91精品91| 午夜av成人| 国产高清不卡| 福利一区和二区| 欧美国产极品| 国产精品久久久久久久久久白浆 | 日本伊人久久| 麻豆精品网站| 亚洲国产日韩欧美在线|