저장 프로시저를 함수로 다시 작성

이 항목에서는 기존 저장 프로시저의 논리를 사용자 정의 함수로 다시 작성할 것인지 여부를 결정하는 방법에 대해 설명합니다. 예를 들어 쿼리에서 직접 저장 프로시저를 호출하려는 경우에는 코드를 사용자 정의 함수로 다시 작성해야 합니다.

일반적으로 저장 프로시저에서 하나의 결과 집합을 반환하면 테이블 반환 함수를 정의합니다. 저장 프로시저에서 스칼라 값을 계산하면 스칼라 함수를 정의합니다.

테이블 반환 함수의 기준

저장 프로시저가 다음 기준을 충족하면 테이블 반환 함수로 다시 작성할 수 있습니다.

  • 단지 매개 변수에 대한 필요성 때문에 논리가 뷰가 아닌 저장 프로시저이고 하나의 SELECT 문에서 표현할 수 있습니다. 이 경우 인라인 테이블 반환 함수로 처리할 수 있습니다.

  • 저장 프로시저에서 테이블 변수를 제외하고는 업데이트 작업을 수행하지 않습니다.

  • 동적 EXECUTE 문이 필요하지 않습니다.

  • 저장 프로시저에서 하나의 결과 집합을 반환합니다.

  • 저장 프로시저의 주된 목적은 임시 테이블로 로드한 다음 SELECT 문에서 쿼리할 중간 결과를 작성하는 것입니다. INSERT...EXEC 문은 테이블 반환 함수를 사용하여 작성할 수 있습니다. 예를 들어 다음 시퀀스를 살펴봅니다.

    INSERT #temp EXEC sp_getresults
    SELECT ...
    FROM #temp, t1
    WHERE ...
    

    sp_getresults 저장 프로시저는 테이블 반환 함수인 **fn_results()**를 사용하여 다시 작성할 수 있습니다. 즉, 앞의 문을 다음과 같이 다시 작성할 수 있습니다.

    INSERT #temp
    SELECT ...
    FROM fn_results(), t1
    WHERE ...
    

CLR을 사용하여 확장 저장 프로시저 다시 작성

CLR 함수는 확장 저장 프로시저의 안정성과 확장성을 향상시키는 대안입니다. Transact-SQL에서 표현하기 어려운 몇 가지 계산 작업을 수행하는 확장 저장 프로시저가 많습니다. 이러한 저장 프로시저를 CRL을 사용하여 다시 작성하면 위에서 설명한 것과 같은 이점이 있습니다. 또한 파일 또는 웹 서비스와 같은 외부 리소스에 액세스하여 결과 집합을 반환하는 확장 저장 프로시저는 CLR 테이블 반환 함수를 사용하여 다시 작성할 수 있습니다. 자세한 내용은 CLR 함수 만들기를 참조하십시오.