<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0

    功能:
        定義 Transact-SQL 服務器游標的特性,例如游標的滾動行為和用于生成游標對其進行操作的結果集的查詢。DECLARE CURSOR 接受基于 SQL-92 標準的語法和使用一組 Transact-SQL 擴展的語法。

    SQL-92 語法
    DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
    FOR select_statement
    [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]

    Transact-SQL 擴展語法
    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 ] ] ]

    SQL-92 參數
    cursor_name

    是所定義的 Transact-SQL 服務器游標名稱。cursor_name 必須遵從標識符規則。有關標識符規則的更多信息,請參見使用標識符。

    INSENSITIVE

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

    SCROLL

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

    select_statement

    是定義游標結果集的標準 SELECT 語句。在游標聲明的 select_statement 內不允許使用關鍵字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO。

    如果 select_statement 中的子句與所請求的游標類型的功能發生沖突,則 Microsoft? SQL Server? 隱性地將游標轉換為另一種類型。有關更多信息,請參見隱性游標轉換。

    READ ONLY

    Prevents updates made through this cursor.在 UPDATE 或 DELETE 語句的 WHERE CURRENT OF 子句中不能引用游標。該選項替代要更新的游標的默認功能。

    UPDATE [OF column_name [,...n]]

    定義游標內可更新的列。如果指定 OF column_name [,...n] 參數,則只允許修改所列出的列。如果在 UPDATE 中未指定列的列表,則可以更新所有列。

    Transact-SQL 擴展參數
    cursor_name

    是所定義的 Transact-SQL 服務器游標名稱。cursor_name 必須遵從標識符規則。有關標識符規則的更多信息,請參見使用標識符。

    LOCAL

    指定該游標的作用域對在其中創建它的批處理、存儲過程或觸發器是局部的。該游標名稱僅在這個作用域內有效。在批處理、存儲過程、觸發器或存儲過程 OUTPUT 參數中,該游標可由局部游標變量引用。OUTPUT 參數用于將局部游標傳遞回調用批處理、存儲過程或觸發器,它們可在存儲過程終止后給游標變量指派參數使其引用游標。除非 OUTPUT 參數將游標傳遞回來,否則游標將在批處理、存儲過程或觸發器終止時隱性釋放。如果 OUTPUT 參數將游標傳遞回來,游標在最后引用它的變量釋放或離開作用域時釋放。

    GLOBAL

    指定該游標的作用域對連接是全局的。在由連接執行的任何存儲過程或批處理中,都可以引用該游標名稱。該游標僅在脫接時隱性釋放。

     

    說明  如果 GLOBAL 和 LOCAL 參數都未指定,則默認值由 default to local cursor 數據庫選項的設置控制。在 SQL Server 7.0 版中,該選項默認為 FALSE 以與 SQL Server 早期版本相匹配,在 SQL Server 早期版本中所有游標都是全局的。該選項的默認值在以后的 SQL Server 版本中可能會更改。有關更多信息,請參見設置數據庫選項。


    FORWARD_ONLY

    指定游標只能從第一行滾動到最后一行。FETCH NEXT 是唯一受支持的提取選項。如果在指定 FORWARD_ONLY 時不指定 STATIC、KEYSET 和 DYNAMIC 關鍵字,則游標作為 DYNAMIC 游標進行操作。如果 FORWARD_ONLY 和 SCROLL 均未指定,除非指定 STATIC、KEYSET 或 DYNAMIC 關鍵字,否則默認為 FORWARD_ONLY。STATIC、KEYSET 和 DYNAMIC 游標默認為 SCROLL。與 ODBC 和 ADO這類數據庫 API 不同,STATIC、KEYSET 和 DYNAMIC Transact-SQL 游標支持 FORWARD_ONLY。FAST_FORWARD 和 FORWARD_ONLY 是互斥的;如果指定一個,則不能指定另一個。

    STATIC

    定義一個游標,以創建將由該游標使用的數據的臨時復本。對游標的所有請求都從 tempdb 中的該臨時表中得到應答;因此,在對該游標進行提取操作時返回的數據中不反映對基表所做的修改,并且該游標不允許修改。

    KEYSET

    指定當游標打開時,游標中行的成員資格和順序已經固定。對行進行唯一標識的鍵集內置在 tempdb 內一個稱為 keyset 的表中。對基表中的非鍵值所做的更改(由游標所有者更改或由其它用戶提交)在用戶滾動游標時是可視的。其他用戶進行的插入是不可視的(不能通過 Transact-SQL 服務器游標進行插入)。如果某行已刪除,則對該行的提取操作將返回 @@FETCH_STATUS 值 -2。從游標外更新鍵值類似于刪除舊行后接著插入新行的操作。含有新值的行不可視,對含有舊值的行的提取操作將返回 @@FETCH_STATUS 值 -2。如果通過指定 WHERE CURRENT OF 子句用游標完成更新,則新值可視。

    DYNAMIC

    定義一個游標,以反映在滾動游標時對結果集內的行所做的所有數據更改。行的數據值、順序和成員在每次提取時都會更改。動態游標不支持 ABSOLUTE 提取選項。

    FAST_FORWARD

    指定啟用了性能優化的 FORWARD_ONLY、READ_ONLY 游標。如果指定 FAST_FORWARD,則不能也指定 SCROLL 或 FOR_UPDATE。FAST_FORWARD 和 FORWARD_ONLY 是互斥的;如果指定一個,則不能指定另一個。

    READ_ONLY

    禁止通過該游標進行更新。在 UPDATE 或 DELETE 語句的 WHERE CURRENT OF 子句中不能引用游標。該選項替代要更新的游標的默認功能。

    SCROLL_LOCKS

    指定確保通過游標完成的定位更新或定位刪除可以成功。當將行讀入游標以確保它們可用于以后的修改時,Microsoft? SQL Server? 會鎖定這些行。如果還指定了 FAST_FORWARD,則不能指定 SCROLL_LOCKS。

    OPTIMISTIC

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

    TYPE_WARNING

    指定如果游標從所請求的類型隱性轉換為另一種類型,則給客戶端發送警告消息。

    select_statement

    是定義游標結果集的標準 SELECT 語句。在游標聲明的 select_statement 內不允許使用關鍵字 COMPUTE、COMPUTE BY、FOR BROWSE 和 INTO。

    如果 select_statement 內的子句與所請求的游標類型沖突,SQL Server 將游標隱性轉換成另一種類型。有關更多信息,請參見隱性游標轉換。

    UPDATE [OF column_name [,...n]]

    定義游標內可更新的列。如果提供了 OF column_name [,...n],則只允許修改列出的列。如果在 UPDATE 中未指定列的列表,除非指定了 READ_ONLY 并發選項,否則所有列均可更新。

    注釋
    DECLARE CURSOR 定義 Transact-SQL 服務器游標的特性,例如游標的滾動行為和用于生成游標對其進行操作的結果集的查詢。OPEN 語句填充結果集,FETCH 從結果集返回行。CLOSE 語句釋放與游標關聯的當前結果集。DEALLOCATE 語句釋放游標所使用的資源。

    DECLARE CURSOR 語句的第一種格式使用 SQL-92 語法聲明游標行為。DECLARE CURSOR 的第二種格式使用 Transact-SQL 擴展,使您得以使用在 ODBC、ADO 和 DB-Library的數據庫 API 游標函數中的相同游標類型定義游標。

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

    如果使用 Transact-SQL 語法的 DECLARE CURSOR 不指定 READ_ONLY、OPTIMISTIC 或 SCROLL_LOCKS,則默認設置如下:

    如果 SELECT 語句不支持更新(權限不夠,訪問的遠程表不支持更新,等等),則游標是 READ_ONLY。


    STATIC 和FAST_FORWARD 游標默認為 READ_ONLY。


    DYNAMIC 和 KEYSET 游標默認為 OPTIMISTIC。
    游標名稱只能由其它 Transact-SQL 語句引用,不能由數據庫 API 函數引用。例如,在聲明游標后,不能從 OLE DB、ODBC、ADO 或 DB-Library 函數或方法引用游標名稱。游標行不能通過 API 提取函數或方法提取,而只能由 Transact-SQL FETCH 語句提取。

    在聲明游標后,可使用下列系統存儲過程確定游標的特性。

    系統存儲過程 描述
    sp_cursor_list 返回當前在連接上可視的游標列表及其特性。
    sp_describe_cursor 描述游標特性,比如是只進游標還是滾動游標。
    sp_describe_cursor_columns 描述游標結果集中的列的特性。
    sp_describe_cursor_tables 描述游標所訪問的基表。


    變量可作為聲明游標的 select_statement 的一部分使用。然而,在游標聲明之后對那些變量的更改將不會對游標的操作產生影響。

    權限
    默認情況下,將 DECLARE CURSOR 權限授予對游標中所使用的視圖、表和列有 SELECT 權限的任何用戶。

    示例
    A. 使用簡單游標和語法
    打開該游標時所生成的結果集包括 pubs 數據庫的 authors 表中的所有行和列。可以更新該游標,對該游標所做的所有更新和刪除均在提取中表現出來。因為沒指定 SCROLL 選項,FETCH NEXT 是唯一可用的提取選項。

    DECLARE authors_cursor CURSOR
       FOR SELECT * FROM authors
    OPEN authors_cursor
    FETCH NEXT FROM authors_cursor

    B. 使用嵌套游標生成報表輸出
    下例顯示如何嵌套游標以生成復雜的報表。為每個作者聲明內部游標。

    SET NOCOUNT ON

    DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40),
       @message varchar(80), @title varchar(80)

    PRINT "-------- Utah Authors report --------"

    DECLARE authors_cursor CURSOR FOR
    SELECT au_id, au_fname, au_lname
    FROM authors
    WHERE state = "UT"
    ORDER BY au_id

    OPEN authors_cursor

    FETCH NEXT FROM authors_cursor
    INTO @au_id, @au_fname, @au_lname

    WHILE @@FETCH_STATUS = 0
    BEGIN
       PRINT " "
       SELECT @message = "----- Books by Author: " +
          @au_fname + " " + @au_lname

       PRINT @message

       -- Declare an inner cursor based  
       -- on au_id from the outer cursor.

       DECLARE titles_cursor CURSOR FOR
       SELECT t.title
       FROM titleauthor ta, titles t
       WHERE ta.title_id = t.title_id AND
       ta.au_id = @au_id   -- Variable value from the outer cursor

       OPEN titles_cursor
       FETCH NEXT FROM titles_cursor INTO @title

       IF @@FETCH_STATUS <> 0
          PRINT "         <<No Books>>"    

       WHILE @@FETCH_STATUS = 0
       BEGIN
         
          SELECT @message = "         " + @title
          PRINT @message
          FETCH NEXT FROM titles_cursor INTO @title
      
       END

       CLOSE titles_cursor
       DEALLOCATE titles_cursor
      
       -- Get the next author.
       FETCH NEXT FROM authors_cursor
       INTO @au_id, @au_fname, @au_lname
    END

    CLOSE authors_cursor
    DEALLOCATE authors_cursor
    GO

    -------- Utah Authors report --------
     
    ----- Books by Author: Anne Ringer
             The Gourmet Microwave
             Is Anger the Enemy?
     
    ----- Books by Author: Albert Ringer
             Is Anger the Enemy?
             Life Without Fear

    posted on 2008-08-28 11:06 周銳 閱讀(1343) 評論(1)  編輯  收藏 所屬分類: SQL Server
    主站蜘蛛池模板: 一级做a爰全过程免费视频毛片| 国产在线播放线91免费| 成人毛片视频免费网站观看| 国产免费福利体检区久久| 亚洲大香伊人蕉在人依线| 久久综合亚洲色HEZYO国产| 免费观看的a级毛片的网站| 成人久久免费网站| 水蜜桃视频在线观看免费播放高清| 亚洲熟女精品中文字幕| 亚洲欧洲自拍拍偷综合| 亚洲AV无码精品色午夜在线观看| 亚洲国产精品尤物YW在线观看 | 24小时日本在线www免费的| 无码国产精品一区二区免费vr| 亚洲阿v天堂在线2017免费| 羞羞漫画登录页面免费| 亚洲av无码片vr一区二区三区| 亚洲三级在线播放| 亚洲自偷自偷在线成人网站传媒 | 久久精品视频免费看| 在线观看黄片免费入口不卡| XXX2高清在线观看免费视频| 久久精品成人免费观看97| a级毛片免费播放| 亚欧免费视频一区二区三区 | 婷婷亚洲综合五月天小说| 麻豆亚洲AV永久无码精品久久| 91嫩草私人成人亚洲影院| 亚洲人成在线精品| 色偷偷亚洲男人天堂| 一区二区3区免费视频| 青娱乐免费视频在线观看| 国产网站免费观看| 国产亚洲精品岁国产微拍精品| 亚洲人成影院在线观看 | 亚欧在线精品免费观看一区| 女人被男人桶得好爽免费视频| 亚洲一本大道无码av天堂| 亚洲午夜精品在线| 久久久WWW成人免费精品|