sql >> データベース >  >> RDS >> Sqlserver

ストアド プロシージャでの TSQL 相互排他アクセス

    シリアライズ可能 セマフォ ではなく、ロックの分離レベルです .

    この場合は機能しません。コード読み取りへの別のプロセスを妨げない読み取りロックを TXN の最後まで保持するだけです。

    sp_getapplock を使用する必要があります トランザクション モードで。待機する、すぐに爆撃するなどの設定が可能です:あなた次第です

    これは、 TRY CATCH ROLLBACK パターンを含むネストされたストアド プロシージャですか?

    ALTER PROCEDURE get_code 
    AS
    SET XACT_ABORT, NOCOUNT ON
    
    DECLARE @starttrancount int, @result int;
    
    BEGIN TRY
        SELECT @starttrancount = @@TRANCOUNT
    
        IF @starttrancount = 0 BEGIN TRANSACTION
    
        EXEC @result = sp_getapplock 'get_code', 'Exclusive', 'Transaction', 0 
        IF @result < 0
            RAISERROR('INFO: One at a time please`!', 16, 1);
    
        [...Perform work...]
    
    
        IF @starttrancount = 0 
            COMMIT TRANSACTION
        ELSE
            EXEC sp_releaseapplock 'get_code';
    END TRY
    BEGIN CATCH
        IF XACT_STATE() <> 0 AND @starttrancount = 0 
            ROLLBACK TRANSACTION
        RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
    END CATCH
    GO
    


    1. 値が最も高い行は?

    2. バイナリデータを格納するためのVarBinaryとImageSQLServerのデータ型?

    3. エラー:ORA-04043:SQL コマンドラインから特定のユーザー ワークステーション内のテーブルを記述するときに、オブジェクト テーブル名が存在しません

    4. SQL でカンマ区切りの文字列を比較する