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
'programing' 카테고리의 다른 글
| 지연된 객체란 무엇입니까? (0) | 2023.08.16 |
|---|---|
| Ajax 호출에서 MVC 컨트롤러로 다중 매개 변수 전달 방법 (0) | 2023.08.16 |
| Android에서 프로그래밍 방식으로 전면 플래시 라이트를 켜는 방법은 무엇입니까? (0) | 2023.08.16 |
| 위조 방지 토큰을 사용하여 Ajax 요청을 만드는 방법(mvc) (0) | 2023.08.16 |
| Swift에서 UIBarButtonItem에 대한 작업을 설정하는 방법 (0) | 2023.08.16 |