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

亚洲av色香蕉一区二区三区,十四以下岁毛片带血a级,亚洲 校园 欧美 国产 另类,亚洲av日韩av一区谷露,色欲av无码一区二区三区

  • 相關(guān)軟件
    >SET @local_variable 創(chuàng)建者:webmaster 更新時(shí)間: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



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



    expression



    是任何有效的 Microsoft® SQL Server™ 表達(dá)式。



    cursor_variable



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



    cursor_name



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



    CURSOR



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



    SCROLL



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



    FORWARD_ONLY



    指定游標(biāo)僅支持 FETCH NEXT 選項(xiàng)。只能以一個(gè)方向、從第一行到最后一行檢索游標(biāo)。如果沒有使用 STATIC、KEYSET 或 DYNAMIC 關(guān)鍵字指定 FORWARD_ONLY,游標(biāo)將作為 DYNAMIC 實(shí)現(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 是互斥的;如果指定一個(gè),則不能指定另一個(gè)。



    STATIC



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



    KEYSET



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



    DYNAMIC



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



    FAST_FORWARD



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



    READ_ONLY



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



    SCROLL LOCKS



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



    OPTIMISTIC



    指定如果行自從被讀入游標(biāo)以來已得到更新,則通過游標(biāo)進(jìn)行的定位更新或定位刪除不成功。當(dāng)將行讀入游標(biāo)時(shí) SQL Server 不鎖定行。相反,SQL Server 使用 timestamp 列值的比較,或者如果表沒有 timestamp 列則使用校驗(yàn)值,以確定將行讀入游標(biāo)后是否已修改該行。如果已修改該行,嘗試進(jìn)行的定位更新或定位刪除將失敗。如果還指定了 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 中包含聚合表達(dá)式,游標(biāo)將創(chuàng)建為 STATIC。



    如果每個(gè)基礎(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)。這一點(diǎn)同樣適用于使用不帶 STATIC 關(guān)鍵字的 SQL-92 語法定義的游標(biāo)。



    READ ONLY



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



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



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



    注釋


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



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



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



    即使游標(biāo)變量引用全局游標(biāo),它們也始終是局部變量。當(dāng)游標(biāo)變量引用全局游標(biāo)時(shí),該游標(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 變量,將一個(gè)字符串值放在變量中,并輸出 @myvar 變量的值。



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


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


    下例創(chuàng)建一個(gè)名為 @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)建一個(gè)局部變量,然后將游標(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ù):