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

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

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

    鎖定應(yīng)用程序資源。



    語法


    sp_getapplock [ @Resource = ] 'resource_name',

        [ @LockMode = ] 'lock_mode'

        [ , [ @LockOwner = ] 'lock_owner' ]

        [ , [ @LockTimeout = ] 'value' ]



    參數(shù)


    [@Resource =] 'resource_name'



    由客戶端應(yīng)用程序指定的鎖資源名稱。應(yīng)用程序必須確保資源的唯一性。指定名稱經(jīng)過內(nèi)部哈希計(jì)算后成為可以存儲(chǔ)在 SQL Server 鎖管理器中的值,resource name 的數(shù)據(jù)類型為 nvarchar(255),沒有默認(rèn)值。



    [@LockMode =] 'lock_mode'



    鎖模式。lock_mode 的數(shù)據(jù)類型為 nvarchar(32),沒有默認(rèn)值,它可以為下列值之一:SharedUpdate、Exclusive、IntentExclusiveIntentShared。



    [@LockOwner =] 'lock_owner'



    是鎖的所有者。lock_owner 的數(shù)據(jù)類型為 nvarchar(32),并且可以是 Transaction(默認(rèn)值)或 Session。當(dāng) lock_owner 值為默認(rèn)值或當(dāng)顯式地指定 Transaction 時(shí),則必須從事務(wù)內(nèi)執(zhí)行 sp_getapplock。



    [@LockTimeout =] 'value'



    鎖超時(shí)值,以毫秒為單位。默認(rèn)值與 @@LOCK_TIMEOUT 返回的值相同。若要指定對(duì)于不能立即授予的鎖請(qǐng)求應(yīng)返回一個(gè)錯(cuò)誤,而不應(yīng)等待鎖,請(qǐng)指定 0。



    返回代碼值


    >= 0(成功)或 <= 0(失?。?/P>





































    Value結(jié)果
    0鎖已同時(shí)成功授予。
    1在等待釋放其它不兼容鎖后成功授予鎖。
    -1鎖請(qǐng)求超時(shí)。
    -2鎖請(qǐng)求被取消。
    -3選擇鎖請(qǐng)求作為死鎖犧牲品。
    -999參數(shù)驗(yàn)證或其它調(diào)用錯(cuò)誤。



    注釋


    在資源上設(shè)置的鎖與當(dāng)前事務(wù)或當(dāng)前會(huì)話相關(guān)聯(lián)。當(dāng)事務(wù)提交或回滾時(shí),將釋放與當(dāng)前事務(wù)相關(guān)聯(lián)的鎖。當(dāng)會(huì)話注銷時(shí),將釋放與會(huì)話相關(guān)聯(lián)的鎖。服務(wù)器因任何原因而關(guān)閉時(shí),都將釋放鎖。



    可以使用 sp_releaseapplock 顯式釋放鎖。如果應(yīng)用程序?yàn)橥绘i資源多次調(diào)用 sp_getapplock,則必須調(diào)用同樣次數(shù)的 sp_releaseapplock 來釋放鎖。



    如果為同一鎖資源多次調(diào)用 sp_getapplock,但是指定了不同的鎖模式,則對(duì)資源的影響將是兩個(gè)鎖模式的聯(lián)合。多數(shù)情況下,這意味著將鎖模式提升為現(xiàn)有模式和新請(qǐng)求模式中更強(qiáng)的模式。即使出現(xiàn)鎖釋放調(diào)用,也會(huì)把持這一更強(qiáng)的模式直到最終釋放鎖。例如,在以下調(diào)用順序中,將以排它模式而非共享模式控制資源。



    USE Northwind
    GO
    BEGIN TRAN
    DECLARE @result int
    EXEC @result = sp_getapplock @Resource = 'Form1',
            @LockMode = 'Shared'
    EXEC @result = sp_getapplock @Resource = 'Form1',
            @LockMode = 'Exclusive'
    EXEC @result = sp_releaseapplock @Resource = 'Form1'
    COMMIT TRAN


    如果應(yīng)用程序鎖發(fā)生死鎖,則該死鎖不會(huì)回滾請(qǐng)求此應(yīng)用程序鎖的事務(wù)。必須手工完成任何可能導(dǎo)致返回值的潛在請(qǐng)求的回滾。因此,建議在代碼中使用錯(cuò)誤檢查,如果返回某些值(例如 -3),則啟動(dòng) ROLLBACK TRANSACTION 或選擇性操作。



    以下是示例:
    USE Northwind
    GO
    BEGIN TRAN
    DECLARE @result int
    EXEC @result = sp_getapplock @Resource = 'Form1',
            @LockMode = 'Exclusive'

    IF @result = '-3'
    BEGIN
        ROLLBACK TRAN
    END
    ELSE
    BEGIN
      EXEC @result = sp_releaseapplock @Resource = 'Form1'
      COMMIT TRAN
    END


    SQL Server 使用當(dāng)前數(shù)據(jù)庫 ID 來限定資源。因此,如果在不同數(shù)據(jù)庫上執(zhí)行 sp_getapplock,即便使用了相同的參數(shù)值,結(jié)果仍然是在單獨(dú)資源上使用單獨(dú)鎖。



    使用 sp_lock 檢查鎖信息或使用 SQL 事件探查器監(jiān)視鎖。



    權(quán)限


    執(zhí)行權(quán)限默認(rèn)授予 public 角色。



    示例


    下面的示例在 Northwind 數(shù)據(jù)庫中的資源"Form1"上設(shè)置共享鎖,使其與當(dāng)前事務(wù)關(guān)聯(lián)。



    USE
    Northwind
    GO
    BEGIN TRAN
    DECLARE @result int
    EXEC @result = sp_getapplock @Resource = 'Form1',
                @LockMode = 'Shared'
    COMMIT TRAN
    相關(guān)文章
    本頁查看次數(shù):