복붙노트

[SQL] 때 당신은 테이블 반환 함수를 사용해야합니까? [닫은]

SQL

때 당신은 테이블 반환 함수를 사용해야합니까? [닫은]

저는 현재 SQL 서버의 기능에 대해 배우고 당신은 인라인 테이블 값 함수를 사용하는 것이 왜 / 이해가 안 돼요.

나는 그것을하고 몇 가지 예에 대한 책을 읽은 시도했다 그러나 그것은 나에게 여전히 불분명하다. 누군가가 설명 또는 사용의 시나리오를 이해하기 쉬운을 제공 할 수 있습니까?

해결법

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

    1.테이블 반환 함수는 "그냥"매개 변수 도면이다. 이것은 달리 불투명 한 저장 프로 시저 뒤에 숨겨진 될 로직을 캡슐화하기에 매우 강력합니다. 다음은 그 예이다 :

    테이블 반환 함수는 "그냥"매개 변수 도면이다. 이것은 달리 불투명 한 저장 프로 시저 뒤에 숨겨진 될 로직을 캡슐화하기에 매우 강력합니다. 다음은 그 예이다 :

    인라인 테이블 반환 함수 :

    create function dbo.GetClients (
        @clientName nvarchar(max) = null
    )
    returns table
    return (
        select *
        from dbo.Clients as a
        where ((a.ClientName = @clientName) or a.ClientName is null)
    );
    

    저장 프로 시저 :

    create procedure dbo.usp_GetClients (
        @clientName nvarchar(max) = null
    )
    as
    begin;
        select *
        from dbo.Clients as a
        where ((a.ClientName = @clientName) or a.ClientName is null)
    end;
    

    저장 프로 시저 호출과는 달리, 테이블 반환 함수는 다른 개체와 dbo.GetClients에서 논리를 구성 할 날 수 있습니다 :

    select *
    from dbo.GetClients(N'ACME') as a
    join ... as b
        on a.ClientId = b.ClientId
    

    이러한 상황에서 나는 때문에 테이블 반환 함수에 비해 얼마나 제한의 저장 프로 시저를 사용하여 상상할 수 없다. 나는 여러 개체에서 결과를 결합하기 위해 임시 테이블, 테이블 변수 또는 응용 프로그램 계층을 사용하여 자신 주위에 데이터를 마샬링하도록 강요 될 것이다.

    인라인 테이블 반환 함수 때문에 아마 가장 여기에서 설명되는 "인라인"비트의 특히 굉장하다. 이 최적화가 더 다르게들이 가까운 최적의 성능 계획의 결과로 캡슐화하는 객체보다 같은 기능을 처리하지 할 수 있습니다 (귀하의 인덱스와 통계 이상적인 가정).

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

    2.이것은 좋은 질문과 충분한 이럴 논의 아니에요 주제입니다. 매개 변수를 받아보기로 인라인 테이블 반환 함수의 생각. 그 짧은 대답하지만,하자가 좀 더 깊이 파고 ...

    이것은 좋은 질문과 충분한 이럴 논의 아니에요 주제입니다. 매개 변수를 받아보기로 인라인 테이블 반환 함수의 생각. 그 짧은 대답하지만,하자가 좀 더 깊이 파고 ...

    스칼라 함수 (SVF), 다중 회선 테이블 반환 함수 (mTVF) 및 인라인 테이블 반환 함수 (iTVF) : SQL 서버에서는 사용자 정의 함수 * 세 가지 종류가있다. svfs 모두 mTVFs 및 iTVFs 테이블을 반환 하나의 값을 반환합니다. mTVFs iTVFs과의 차이는 성능이다. 한마디로 - mTVFs가 느리고, iTVFs 훨씬 더 빨리 (거의 항상) 할 수 있습니다. mTVFs (예를 들어, 임시 테이블을 만들어 루프를 수행 커서를 사용 ...), iTVFs가, 다시, 그들은 매개 변수를 제외시켰다 수를 제외하고 전망과 같은 제한이 당신이보기에 할 수 없었던 일을 할 수 있습니다.

    내가 매개 변수 및 분할 / 조작 문자열을 소요 뷰를 필요로 일반적인 데이터웨어 하우스 쿼리에 대한 iTFVs를 사용합니다. http://www.sqlservercentral.com/articles/T- : - 내 경력을 변경했습니다 iTVFs의 고급 사용이 iTVFs와 스칼라 함수를 대체 제목 제프 MODEN에서이 문서를 참조하십시오, "어떻게 스칼라 UDF를 실행 빨리 만드는 방법"을 SQL / 91724 /

  3. from https://stackoverflow.com/questions/40535519/when-would-you-use-a-table-valued-function by cc-by-sa and MIT license