精品国产亚洲一区二区三区,男女作爱在线观看免费网站,欧美的又大又长做禁片A片,97国产精品人妻无码久久久

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

    標(biāo)記一個(gè)顯式本地事務(wù)的起始點(diǎn)。BEGIN TRANSACTION將 @@TRANCOUNT 加 1。



    語法


    BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable

        [ WITH MARK [ 'description' ] ] ]



    參數(shù)


    transaction_name



    是給事務(wù)分配的名稱。transaction_name 必須遵循標(biāo)識(shí)符規(guī)則,但是不允許標(biāo)識(shí)符多于 32 個(gè)字符。僅在嵌套的 BEGIN...COMMIT 或 BEGIN...ROLLBACK 語句的最外語句對上使用事務(wù)名。



    @tran_name_variable



    是用戶定義的、含有有效事務(wù)名稱的變量的名稱。必須用 char、varchar、ncharnvarchar 數(shù)據(jù)類型聲明該變量。



    WITH MARK ['description']



    指定在日志中標(biāo)記事務(wù)。Description 是描述該標(biāo)記的字符串。



    如果使用了 WITH MARK,則必須指定事務(wù)名。WITH MARK 允許將事務(wù)日志還原到命名標(biāo)記。



    注釋


    BEGIN TRANSACTION 代表一點(diǎn),由連接引用的數(shù)據(jù)在該點(diǎn)是邏輯和物理上都一致的。如果遇上錯(cuò)誤,在 BEGIN TRANSACTION 之后的所有數(shù)據(jù)改動(dòng)都能進(jìn)行回滾,以將數(shù)據(jù)返回到已知的一致狀態(tài)。每個(gè)事務(wù)繼續(xù)執(zhí)行直到它無誤地完成并且用 COMMIT TRANSACTION 對數(shù)據(jù)庫作永久的改動(dòng),或者遇上錯(cuò)誤并且用 ROLLBACK TRANSACTION 語句擦除所有改動(dòng)。



    BEGIN TRANSACTION 為使用本語句的連接啟動(dòng)一個(gè)本地事務(wù)。根據(jù)當(dāng)前事務(wù)隔離級別的設(shè)置情況,為支持該連接所發(fā)出的 Transact-SQL 語句而獲取的許多資源被該事務(wù)鎖定,直到此事務(wù)以 COMMIT TRANSACTION 或 ROLLBACK TRANSACTION 語句完成。長時(shí)間處于等待處理狀態(tài)的事務(wù)會(huì)阻止其他用戶訪問鎖定的資源。



    雖然 BEGIN TRANSACTION 啟動(dòng)一個(gè)本地事務(wù),但是在應(yīng)用程序接下來執(zhí)行了一個(gè)必須記錄的操作(如執(zhí)行 INSERT、UPDATE 或 DELETE 語句)之前,它并不被記錄在事務(wù)日志中。應(yīng)用程序能執(zhí)行一些操作,例如為了保護(hù) SELECT 語句的事務(wù)隔離級別而獲取鎖,但是直到應(yīng)用程序執(zhí)行一個(gè)修改操作日志中才有記錄。



    在一系列嵌套的事務(wù)中用一個(gè)事務(wù)名給多個(gè)事務(wù)命名對該事務(wù)沒有什么影響。系統(tǒng)僅登記第一個(gè)(最外部的)事務(wù)名?;貪L到其它任何名字(有效的保存點(diǎn)名除外)都會(huì)產(chǎn)生錯(cuò)誤。事實(shí)上,任何在回滾之前執(zhí)行的語句都沒有在錯(cuò)誤發(fā)生時(shí)回滾。這些語句僅當(dāng)外層的事務(wù)回滾時(shí)才會(huì)進(jìn)行回滾。



    BEGIN TRANSACTION 啟動(dòng)一個(gè)本地事務(wù)。如果在事務(wù)提交或回滾之前執(zhí)行了如下操作,本地事務(wù)將升級到分布式事務(wù):


    • 執(zhí)行了一個(gè) INSERT、DELETE 或 UPDATE 語句,該語句引用了連接的服務(wù)器上的一個(gè)遠(yuǎn)程表。如果用于訪問連接服務(wù)器的 OLE DB 提供程序不支持 ItransactionJoin 接口,該 INSERT、UPDATE 或 DELETE 語句則會(huì)失敗。



    • 當(dāng)啟用了 REMOTE_PROC_TRANSACTIONS 選項(xiàng)時(shí),將調(diào)用遠(yuǎn)程存儲(chǔ)過程。



    SQL Server 的本地復(fù)本成為事務(wù)控制器并且使用 MS DTC 來管理該分布式事務(wù)。



    標(biāo)記事務(wù)


    WITH MARK 選項(xiàng)使事務(wù)名置于事務(wù)日志中。將數(shù)據(jù)庫還原到早期狀態(tài)時(shí),可使用標(biāo)記事務(wù)替代日期和時(shí)間。有關(guān)更多信息,請參見將數(shù)據(jù)庫還原到前一個(gè)狀態(tài)、恢復(fù)到命名事務(wù)RESTORE。



    另外,若要將一組相關(guān)數(shù)據(jù)庫恢復(fù)到邏輯上一致的狀態(tài),必須使用事務(wù)日志標(biāo)記。標(biāo)記可由分布式事務(wù)置于相關(guān)數(shù)據(jù)庫的事務(wù)日志中。將這組相關(guān)數(shù)據(jù)庫恢復(fù)到這些標(biāo)記將產(chǎn)生一組在事務(wù)上一致的數(shù)據(jù)庫。在相關(guān)數(shù)據(jù)庫中放置標(biāo)記需要特殊的過程。有關(guān)更多信息,請參見"相關(guān)數(shù)據(jù)庫的備份和恢復(fù)"。



    只有當(dāng)數(shù)據(jù)庫由標(biāo)記事務(wù)更新時(shí),才在事務(wù)日志中放置標(biāo)記。不修改數(shù)據(jù)的事務(wù)不被標(biāo)記。



    在已存在的未標(biāo)記事務(wù)中可以嵌套 BEGIN TRAN new_name WITH MARK。嵌套后,new_name 便成為事務(wù)的標(biāo)記名,不論是否已為事務(wù)提供了該名稱。在下例中,M2 是標(biāo)記名。



    BEGIN TRAN T1
    UPDATE table1 ...
    BEGIN TRAN M2 WITH MARK
    UPDATE table2 ...
    SELECT * from table1
    COMMIT TRAN M2
    UPDATE table3 ...
    COMMIT TRAN T1


    嘗試標(biāo)記已標(biāo)記的事務(wù)將產(chǎn)生警告(非錯(cuò)誤)消息:



    BEGIN TRAN T1 WITH MARK
    UPDATE table1 ...
    BEGIN TRAN M2 WITH MARK

    Server: Msg 3920, Level 16, State 1, Line 3
    WITH MARK option only applies to the first BEGIN TRAN WITH MARK.
    The option is ignored.


    權(quán)限


    任何有效的用戶都具有默認(rèn)的 BEGIN TRANSACTION 權(quán)限。



    示例


    A. 命名事務(wù)


    下例說明如何命名事務(wù)。提交命名事務(wù)后,為所有暢銷計(jì)算機(jī)書籍支付的版稅增加 10%。



    DECLARE @TranName VARCHAR(20)
    SELECT @TranName = 'MyTransaction'

    BEGIN TRANSACTION @TranName
    GO
    USE pubs
    GO
    UPDATE roysched
    SET royalty = royalty * 1.10
    WHERE title_id LIKE 'Pc%'
    GO

    COMMIT TRANSACTION MyTransaction
    GO


B. 標(biāo)記事務(wù)


下例說明如何標(biāo)記事務(wù)。標(biāo)記名為"RoyaltyUpdate"的事務(wù)。



BEGIN TRANSACTION RoyaltyUpdate 
  WITH MARK 'Update royalty values'
GO
USE pubs
GO
UPDATE roysched
  SET royalty = royalty * 1.10
  WHERE title_id LIKE 'Pc%'
GO
COMMIT TRANSACTION RoyaltyUpdate
GO

相關(guān)文章
本頁查看次數(shù):