복붙노트

[SQL] SQL Server 2008의 매개 변수보기 만들기

SQL

SQL Server 2008의 매개 변수보기 만들기

우리는 SQL Server 2008의 매개 변수보기를 만들 수 있습니다.

또는 이것에 대한 다른 대안?

해결법

  1. ==============================

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

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

    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)
    

    당신은 당신이 전혀 함수의 언급을 볼 수 없습니다 실제로 단지 기본 테이블이 조회되는 방법을 보여줍니다 선택에 대한 실행 계획을 볼 경우. 이 쿼리에 대한 실행 계획을 생성 할 때 사용되는 기본 테이블에 대한 통계를 의미로 좋다.

    기본 테이블 통계 인해 가난한 실행 계획에 사용되지 않고 성능이 저하 될 수 피할 수있는 것은 다중 문 테이블 반환 함수 될 것이다. 방지하는 무엇의 예 :

    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
    

    미묘하게 다른,하지만 기능은 쿼리에 사용되는 성능에 잠재적으로 큰 차이.

  2. ==============================

    2.아니 당신은 할 수 없습니다. 하지만 당신은 사용자 정의 테이블 함수를 만들 수 있습니다.

    아니 당신은 할 수 없습니다. 하지만 당신은 사용자 정의 테이블 함수를 만들 수 있습니다.

  3. ==============================

    3.사실 하나의 트릭이 존재한다 :

    사실 하나의 트릭이 존재한다 :

    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 쿼리에서 :

    set context_info 2
    select * from view_test
    

    와 동일합니다

    select * from table where id = 2
    

    그러나 UDF를 사용하는 것이 더 허용

  4. ==============================

    4.astander 언급했듯이, 당신은 UDF로 그렇게 할 수 있습니다. 그러나, (같은 인라인 테이블 함수 oppoosed) 스칼라 함수를 사용하여 큰 세트에 대한 성능 함수는 행 단위로 평가되는 악취 것이다. 다른 방법으로, 당신은 당신의 매개 변수 값에 대체 자리에 고정 된 쿼리를 실행 저장 프로 시저를 통해 동일한 결과를 노출 할 수있다.

    astander 언급했듯이, 당신은 UDF로 그렇게 할 수 있습니다. 그러나, (같은 인라인 테이블 함수 oppoosed) 스칼라 함수를 사용하여 큰 세트에 대한 성능 함수는 행 단위로 평가되는 악취 것이다. 다른 방법으로, 당신은 당신의 매개 변수 값에 대체 자리에 고정 된 쿼리를 실행 저장 프로 시저를 통해 동일한 결과를 노출 할 수있다.

    (다음은 스칼라 UDF에 대한 행 단위 처리에 다소 일자하지만 여전히 관련 기사입니다.)

    편집 : 코멘트 다시. 성능을 저하은이 스칼라 UDF의 적용을 취소하도록 조정했다.

  5. ==============================

    5.아니. 당신이 매개 변수를 전달할 수있는 당신은 UDF를 사용할 수 있습니다.

    아니. 당신이 매개 변수를 전달할 수있는 당신은 UDF를 사용할 수 있습니다.

  6. from https://stackoverflow.com/questions/4498364/create-parameterized-view-in-sql-server-2008 by cc-by-sa and MIT license