2014-04-22 3 views
0

SQL Server 2005/2008의 저장 프로 시저에서 일반 SQL 문에 대한 격리 수준을 설정할 수 있습니까?SQL 문에 대한 트랜잭션 격리

사례 1 : (이 잘 작동합니다)

CREATE PROCEDURE MySP 
AS 
BEGIN 
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

    BEGIN TRAN 
    SELECT * FROM MyTable 
    COMMIT TRAN 
END 

사례 2 : (? 여기이 절연 재료의 작업을 수행)

CREATE PROCEDURE MySP 
AS 
BEGIN 
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

    SELECT * FROM MyTable 
END 

경우 2가 올 경우, 여러 위해 일 것 select 문도 마찬가지입니까?

답변

0

SET TRANSACTION ISOLATION LEVEL을 저장 프로 시저에 사용하면이 트랜잭션 격리 수준은 저장 프로 시저 기간 동안 사용됩니다. MSDN에 따르면

객체 반환 객체가 호출 될 때 격리 수준이 적용 수준으로 재설정 제어 할 때 저장 프로 시저 또는 트리거에서 트랜잭션 분리 레벨을 설정 발행하는 경우

.

트랜잭션 격리 수준 설정은 트랜잭션 시작과 동일하지 않습니다. 트랜잭션 격리 수준은 SQL Server에 잠금 제어 방법을 알려줍니다.

READ UNCOMMITTED 트랜잭션 격리 수준이있는 여러 SELECT 쿼리 만있는 경우 트랜잭션으로 모두 넣으면 실제적인 차이가 발생하지 않습니다.

0

격리 수준은 세션 수준에서 세션 옵션으로 설정하거나 쿼리 수준에서 테이블 힌트로 설정할 수 있습니다. 그래서 귀하의 경우는 같은 것

SELECT ... FROM <table> WITH (<isolationname>); 

:

SET TRANSACTION ISOLATION LEVEL <isolation name>; 

당신은 같은 쿼리의 격리 수준을 설정하기 위해 테이블 ​​힌트를 사용할 수 있습니다 전체 세션의 격리 수준을 설정하려면 우리는 명령을 사용 : 참고로 여기

SELECT * 
FROM MyTable WITH (READCOMMITTEDLOCK); 

한 가지입니다 공간이 분리 레벨의 이름이 한 단어 이상으로 구성되어 경우 단어 사이에 지정된 세션 옵션 등 REPEATABLE READ. 쿼리 힌트를 사용하면 단어 사이에 공백을 지정하지 않아도됩니다. 예를 들어 WITH (REPEATABLEREAD).

1

예 여러 선택 문에 대해 작동합니다.

두 번째 저장 프로 시저의 트랜잭션이 부족할 것으로 염려되는 경우 첫 번째 저장 프로 시저에있는 명시 적 트랜잭션과 달리 암시 적 트랜잭션에서 쿼리가 실행된다는 것을 알아야합니다.