programing

SQL Server 2008에서 매개 변수화된 VIEW 생성

elecom 2023. 8. 16. 21:58
반응형

SQL Server 2008에서 매개 변수화된 VIEW 생성

SQL Server 2008에서 매개 변수화된 VIEW를 생성할 수 있습니까?

아니면 이것에 대한 다른 대안이 있습니까?

인라인 테이블 값 함수를 만들어 보십시오.예:

CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
RETURNS TABLE
AS
RETURN
(
    SELECT Field1, Field2
    FROM SomeTable
    WHERE Field3 = @Parameter1
)

-- Then call like this, just as if it's a table/view just with a parameter
SELECT * FROM dbo.fxnExample(1)

SELECT에 대한 실행 계획을 보면 함수에 대한 언급이 전혀 표시되지 않고 쿼리 중인 기본 테이블만 표시됩니다.이것은 쿼리에 대한 실행 계획을 생성할 때 기본 테이블의 통계가 사용된다는 것을 의미하기 때문에 좋습니다.

기본 테이블 통계가 사용되지 않고 실행 계획이 잘못되어 성능이 저하될 수 있으므로 피해야 할 것은 다중 문 테이블 값 함수입니다.
피해야 할 대상의 예:

CREATE FUNCTION dbo.fxnExample (@Parameter1 INTEGER)
    RETURNS @Results TABLE(Field1 VARCHAR(10), Field2 VARCHAR(10))
AS
BEGIN
    INSERT @Results
    SELECT Field1, Field2
    FROM SomeTable
    WHERE Field3 = @Parameter1

    RETURN
END

미묘하게 다르지만 쿼리에 함수가 사용될 때 성능에 큰 차이가 있을 수 있습니다.

아니, 너는 할 수 없어.그러나 사용자 정의 테이블 함수를 만들 수 있습니다.

사실 한 가지 속임수가 있습니다.

create view view_test as

select
  * 
from 
  table 
where id = (select convert(int, convert(binary(4), context_info)) from master.dbo.sysprocesses
where
spid = @@spid)

sql-vmdk:

set context_info 2
select * from view_test

와 동일할 것입니다.

select * from table where id = 2

하지만 udf를 사용하는 것이 더 허용됩니다.

스탠더가 언급했듯이 UDF를 사용하면 이를 수행할 수 있습니다. 그러나 스칼라 함수를 사용하는 대규모 집합의 경우(인라인 테이블 함수와 반대로) 함수가 행 단위로 평가되므로 성능이 저하됩니다.또는 매개 변수 값을 대체하는 자리 표시자를 사용하여 고정 쿼리를 실행하는 저장 프로시저를 통해 동일한 결과를 노출할 수 있습니다.

(여기 스칼라 UDF에 대한 행별 처리에 대한 다소 오래되었지만 여전히 관련이 있는 기사가 있습니다.)

편집: 코멘트 성능 저하는 스칼라 UDF에 적용되도록 조정되었습니다.

매개 변수를 전달할 수 있는 UDF를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/4498364/create-parameterized-view-in-sql-server-2008

반응형