Development Tip

뷰를 사용하는 쿼리에서 WITH NOLOCK 테이블 힌트 사용-뷰 내에서 전파됩니까?

yourdevel 2020. 12. 25. 10:36
반응형

뷰를 사용하는 쿼리에서 WITH NOLOCK 테이블 힌트 사용-뷰 내에서 전파됩니까?


SQL Server의 뷰에서 "WITH NOLOCK"쿼리 힌트를 사용하면 뷰 정의의 원시 테이블에 NOLOCK이 사용되지 않더라도 해당 힌트가 뷰 정의 자체에 전파됩니까? 이것이 필요한 이유는 때때로 지원 담당자가 시간이 많이 걸리는 쿼리를 수행하려고하지만 애플리케이션 자체 내의 뷰를 사용하는 모든 쿼리에 대해이 잠금을 강제하지 않기 때문입니다.


예, NOLOCK은 뷰 정의에 사용되는 테이블에 전파됩니다 (적어도 SQL Server 2005에서는).

MSDN의 테이블 힌트참조하십시오 .

SQL Server 2005에서는 모든 잠금 힌트가 뷰에서 참조되는 모든 테이블과 뷰로 전파됩니다. 또한 SQL Server는 해당 잠금 일관성 검사를 수행합니다.

하나,

테이블에 계산 된 열이 포함되어 있고 계산 된 열이 다른 테이블의 열에 액세스하는 식이나 함수에 의해 계산되는 경우 테이블 힌트는 해당 테이블에서 사용되지 않습니다. 이는 테이블 힌트가 전파되지 않음을 의미합니다. 예를 들어 NOLOCK 테이블 힌트는 쿼리의 테이블에 지정됩니다. 이 테이블에는 다른 테이블의 열에 액세스하는 식과 함수의 조합으로 계산 된 계산 열이 있습니다. 식과 함수에서 참조하는 테이블은 액세스 할 때 NOLOCK 테이블 힌트를 사용하지 않습니다.

인덱싱 된 뷰를 사용하는 경우 특수한 경우도 있으므로 좀 더 읽어보고 싶을 수 있습니다.

자세한 내용은 해상도보기를 참조하십시오 .


Rory의 탁월한 대답을 보완하기 위해.

그는 "예, NOLOCK은 뷰 정의에 사용되는 테이블로 전파됩니다 (적어도 SQL Server 2005에서는) "라고 썼습니다 .

실제로 이것은 SQL 2000에서도 작동합니다. BOL에서 :

select_statement는 SELECT 문을 사용하므로 FROM 절에 지정된대로 및 힌트를 사용하는 것이 유효합니다. 자세한 내용은 FROMSELECT를 참조하십시오 .

참조 URL : https://stackoverflow.com/questions/311429/using-with-nolock-table-hint-in-query-using-view-does-it-propagate-within-the

반응형