복붙노트

[SQL] SQL 서버 - 어떻게 저장 프로 시저가 완료 될 때까지 테이블을 잠급니다

SQL

SQL 서버 - 어떻게 저장 프로 시저가 완료 될 때까지 테이블을 잠급니다

나는이 작업을 수행 할 수 :

create procedure A as
  lock table a
  -- do some stuff unrelated to a to prepare to update a
  -- update a
  unlock table a
  return table b

그 수 같은가요?

궁극적으로 내 SQL 서버가 서비스를 호출 절차 A를보고보고 및 절차가 완료되면 만 표 A를 표시합니다. (I는 반환 표 A에 절차 A를 변경할 수 아니에요).

해결법

  1. ==============================

    1.이 대답은 나 자신을 필요 다윗 Moye에서 제공하는 링크,이 결정하고 같은 질문 다른 사람에게 유용 할 거라고 생각에서 :

    이 대답은 나 자신을 필요 다윗 Moye에서 제공하는 링크,이 결정하고 같은 질문 다른 사람에게 유용 할 거라고 생각에서 :

    CREATE PROCEDURE ...
    AS
    BEGIN
      BEGIN TRANSACTION
    
      -- lock table "a" till end of transaction
      SELECT ...
      FROM a
      WITH (TABLOCK, HOLDLOCK)
      WHERE ...
    
      -- do some other stuff (including inserting/updating table "a")
    
    
    
      -- release lock
      COMMIT TRANSACTION
    END
    
  2. ==============================

    2.

    BEGIN TRANSACTION
    
    select top 1 *
    from table1
    with (tablock, holdlock)
    
    -- You do lots of things here
    
    COMMIT
    

    이것은 현재의 "거래"이 끝날 때까지 '테이블 잠금'을 개최한다.

  3. ==============================

    3.거래의 TABLOCKX 잠금 힌트를 사용합니다. 고정에 대한 자세한 내용은이 문서를 참조하십시오.

    거래의 TABLOCKX 잠금 힌트를 사용합니다. 고정에 대한 자세한 내용은이 문서를 참조하십시오.

  4. from https://stackoverflow.com/questions/3662766/sql-server-how-to-lock-a-table-until-a-stored-procedure-finishes by cc-by-sa and MIT license