programing

SQL Server 2008에서 매개 변수가있는 VIEW 만들기

nasanasas 2020. 11. 1. 18:12
반응형

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-query에서 :

set context_info 2
select * from view_test

다음과 같을 것이다

select * from table where id = 2

그러나 udf를 사용하는 것이 더 적합합니다.


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

( 다음 은 스칼라 UDF에 대한 행별 처리에 대한 다소 날짜가 있지만 여전히 관련 기사입니다.)

편집 : 댓글 다시. 성능 저하가 스칼라 UDF에 적용됨을 명확히하기 위해 조정되었습니다.


no. You can use UDF in which you can pass parameters.

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

반응형