SET @local_variable SET @local_variable - 北京怡康軟件科技有限公司 資源網(wǎng) "/>

中文字幕天天躁日日躁狠狠躁,最近中文字幕大全免费版在线,最近2019免费中文字幕视频三,亚洲精品无码你懂的,亚洲国产精品成人精品小说

  • 相關(guān)軟件
    >SET @local_variable 創(chuàng)建者:webmaster 更新時間:2006-02-16 15:51

    將先前使用 DECLARE @local_variable 語句創(chuàng)建的指定局部變量設(shè)置為給定的值。



    語法


    SET { { @local_variable = expression }

            | { @cursor_variable = { @cursor_variable | cursor_name

                    | { CURSOR [ FORWARD_ONLY | SCROLL ]

                        [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]

                        [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]

                        [ TYPE_WARNING ]

                    FOR select_statement

                        [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] }

                        ]

                    }

            } }

        }



    參數(shù)


    @local_variable



    是除 cursortext、ntext image 外的任何類型變量的名稱。變量名必須以 at 符 (@) 開頭。變量名必須符合標(biāo)識符規(guī)則。有關(guān)更多信息,請參見使用標(biāo)識符。



    expression



    是任何有效的 Microsoft® SQL Server™ 表達式。



    cursor_variable



    是游標(biāo)變量的名稱。如果目標(biāo)游標(biāo)變量先前引用了一個不同的游標(biāo),則刪除先前的引用。



    cursor_name



    使用 DECLARE CURSOR 語句聲明的游標(biāo)名。



    CURSOR



    指定 SET 語句包含游標(biāo)聲明。



    SCROLL



    指定游標(biāo)支持所有的提取選項(FIRST、LAST、NEXT、PRIOR、RELATIVE 和 ABSOLUTE)。如果指定 SCROLL,則不能也指定 FAST_FORWARD。



    FORWARD_ONLY



    指定游標(biāo)僅支持 FETCH NEXT 選項。只能以一個方向、從第一行到最后一行檢索游標(biāo)。如果沒有使用 STATIC、KEYSET 或 DYNAMIC 關(guān)鍵字指定 FORWARD_ONLY,游標(biāo)將作為 DYNAMIC 實現(xiàn)。如果 FORWARD_ONLY 和 SCROLL 均未指定,除非指定 STATIC、KEYSET 或 DYNAMIC 關(guān)鍵字,否則默認(rèn)為 FORWARD_ONLY。STATIC、KEYSET 和 DYNAMIC 游標(biāo)默認(rèn)為 SCROLL。FAST_FORWARD 和 FORWARD_ONLY 是互斥的;如果指定一個,則不能指定另一個。



    STATIC



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



    KEYSET



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



    DYNAMIC



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



    FAST_FORWARD



    指定啟用了優(yōu)化的 FORWARD_ONLY 和 READ_ONLY 游標(biāo)。如果指定 FAST_FORWARD,則不能也指定 SCROLL。FAST_FORWARD 和 FORWARD_ONLY 是互斥的;如果指定一個,則不能指定另一個。



    READ_ONLY



    防止通過該游標(biāo)進行更新。在 UPDATE 或 DELETE 語句的 WHERE CURRENT OF 子句中不能引用游標(biāo)。該選項替代要更新的游標(biāo)的默認(rèn)功能。



    SCROLL LOCKS



    指定確保通過游標(biāo)完成的定位更新或定位刪除可以成功。當(dāng)將行讀入游標(biāo)時,SQL Server 會鎖定這些行,以確保它們稍后可進行修改。如果還指定了 FAST_FORWARD,則不能指定 SCROLL_LOCKS。



    OPTIMISTIC



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



    TYPE_WARNING



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



    FOR select_statement



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



    如果使用了 DISTINCT、UNION、GROUP BY 或 HAVING,或者 select_list 中包含聚合表達式,游標(biāo)將創(chuàng)建為 STATIC。



    如果每個基礎(chǔ)表都沒有唯一索引,并且請求了 SQL-92 SCROLL 游標(biāo)或 Transact-SQL KEYSET 游標(biāo),則游標(biāo)將自動成為 STATIC 游標(biāo)。



    如果 select_statement 包含 ORDER BY,而其中的列不是唯一的行標(biāo)識符,則 DYNAMIC 游標(biāo)將轉(zhuǎn)換為 KEYSET 游標(biāo),或者,如果 KEYSET 游標(biāo)不能打開,則轉(zhuǎn)換為 STATIC 游標(biāo)。這一點同樣適用于使用不帶 STATIC 關(guān)鍵字的 SQL-92 語法定義的游標(biāo)。



    READ ONLY



    防止通過該游標(biāo)進行更新。在 UPDATE 或 DELETE 語句的 WHERE CURRENT OF 子句中不能引用游標(biāo)。該選項替代要更新的游標(biāo)的默認(rèn)功能。該關(guān)鍵字與早期的 READ_ONLY 關(guān)鍵字的不同之處是 READ 和 ONLY 之間是一個空格,而不是下劃線。



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



    定義游標(biāo)內(nèi)可更新的列。如果提供了 OF column_name [,...n],則只允許修改列出的列。如果沒有提供列表,則可以更新所有的列,除非已將游標(biāo)定義為 READ_ONLY。



    注釋


    聲明變量后,所有變量均初始化為 NULL。使用 SET 語句將一個不是 NULL 的值賦給聲明變量。給變量賦值的 SET 語句返回單值。當(dāng)初始化多個變量時,為每個局部變量使用一個單獨的 SET 語句。



    變量只能用在表達式中,不能代替對象名或關(guān)鍵字。若要構(gòu)造動態(tài) SQL 語句,請使用 EXECUTE。



    SET @cursor_variable 的語法規(guī)則不包含 LOCAL 和 GLOBAL 關(guān)鍵字。當(dāng)使用 SET @cursor_variable = CURSOR... 語法時,根據(jù) default to local cursor 數(shù)據(jù)庫選項的設(shè)置,游標(biāo)將創(chuàng)建為 GLOBAL 或 LOCAL。



    即使游標(biāo)變量引用全局游標(biāo),它們也始終是局部變量。當(dāng)游標(biāo)變量引用全局游標(biāo)時,該游標(biāo)既有全局游標(biāo)引用,也有局部游標(biāo)引用。有關(guān)更多信息,請參見示例 C。



    有關(guān)更多信息,請參見 DECLARE CURSOR。



    權(quán)限


    SET @local_variable 權(quán)限默認(rèn)授予所有用戶。



    示例


    A. 輸出使用 SET 初始化的變量值


    下例創(chuàng)建 @myvar 變量,將一個字符串值放在變量中,并輸出 @myvar 變量的值。



    DECLARE @myvar char(20)
    SET @myvar = 'This is a test'
    SELECT @myvar
    GO


    B. 在 SELECT 語句中使用由 SET 賦值的局部變量


    下例創(chuàng)建一個名為 @state 的局部變量,并在 SELECT 語句中使用該局部變量查找居住在猶他州的所有作者的姓名。



    USE pubs
    GO
    DECLARE @state char(2)
    SET @state = 'UT'
    SELECT RTRIM(au_fname) + ' ' + RTRIM(au_lname) AS Name, state
    FROM authors
    WHERE state = @state
    GO


    C. 對全局游標(biāo)使用 SET


    下例創(chuàng)建一個局部變量,然后將游標(biāo)變量設(shè)置為全局游標(biāo)名。



    DECLARE my_cursor CURSOR GLOBAL FOR SELECT * FROM authors
      DECLARE @my_variable CURSOR
      SET @my_variable = my_cursor
                  /* There is a GLOBAL declared
                    reference (my_cursor) and a LOCAL variable
                    reference (@my_variable) to the my_cursor
                    cursor.                         */
      DEALLOCATE my_cursor /* There is now only a LOCAL variable
                    reference (@my_variable) to the my_cursor
                    cursor.                         */


    D. 使用 SET 定義游標(biāo)


    下例使用 SET 語句定義游標(biāo)。



    DECLARE @CursorVar CURSOR

    SET @CursorVar = CURSOR SCROLL DYNAMIC
    FOR
    SELECT LastName, FirstName
    FROM Northwind.dbo.Employees
    WHERE LastName like 'B%'

    OPEN @CursorVar

    FETCH NEXT FROM @CursorVar
    WHILE @@FETCH_STATUS = 0
    BEGIN
      FETCH NEXT FROM @CursorVar
    END

    CLOSE @CursorVar
    DEALLOCATE @CursorVar


    E. 通過查詢賦值


    下例使用查詢給變量賦值。



    USE Northwind
    GO
    DECLARE @rows int
    SET @rows = (SELECT COUNT(*) FROM Customers)
    相關(guān)文章
    本頁查看次數(shù):