mssql function 예제

사용자 정의 함수는 여러 결과 집합을 반환할 수 없습니다. 여러 결과 집합을 반환해야 하는 경우 저장 프로시저를 사용합니다. 목록 22: 인라인 함수 본문으로 TVF를 다시 작성합니다. 두 숫자를 함께 추가하는 것은 결정적 함수의 예입니다.

({ | } [

] [ ,… n] ) 거래 SQL 함수에 대한 테이블 데이터 형식을 정의합니다. 테이블 선언에는 열 정의 및 열 또는 테이블 제약 조건이 포함됩니다. 테이블은 항상 기본 파일 그룹에 배치됩니다. 그러나 어떤 면에서 SQL Server의 기능은 다른 프로그래밍 환경의 함수와 근본적으로 다릅니다. 절차 적 프로그래밍에서 대부분의 프로그래머가 함수라고 부르는 기능을 실제로 미니어처 프로그램과 같은 서브 루틴이라고 불러야합니다. 이러한 서브루틴은 데이터를 변경하고, 부작용을 도입하며, 일반적으로 원하는 만큼 잘못 행동할 수 있습니다. 안타깝게도 최상위 실행 계획(스칼라 함수의 경우)은 Sales.OrderWeight 함수가 Sales.SalesOrderDetail 테이블을 통해 행별로 행을 읽는 즉시 명백한 증거를 숨깁니다.

그에 대한 우리의 증거는 다시, 우리가 우리의 Sales.OrderWeight 기능에 대한 직접 참조를 볼 수있는 계산 스칼라 연산자에서 온다, 행 당 한 번 호출되는 것을 나타내는. function_body는 테이블 수정과 같은 부작용을 함께 생성하지 않는 일련의 Transact-SQL 문이 함수의 값을 정의한다고 지정합니다. function_body는 스칼라 함수 및 다중 문 테이블 값 함수(MSTVF)에서만 사용됩니다. 이 옵션을 사용하면 SQL Server 복제의 일부로 함수가 게시되지 않습니다. CLR 함수에 대해 이 옵션을 지정할 수 없습니다. 경우에 따라 TVF를 완전히 분배하고 함수 논리를 기본 코드에 “수동으로 인라인”해야 할 수도 있습니다. 물론 이것은 다시 사용할 수 있는 논리를 캡슐화하는 함수를 만드는 목적을 무효화합니다. 2. 나는 “그것은 모두 TVF를 분배하고 단순히 “수동으로 인라인”기능 논리를 분배하는 성능 관점에서 일반적으로 더 나은에 대해 흥미를 느낀다. 나는 2008 R2를 실행하는 내 시스템 전체에 인라인 TVFs를 가지고, 나는 내 벤치 마크를 실행하고, 내가 그들을 인라인 할 때 성능의 차이를 관찰 기억하지 않는다. 인라인 TVF가 제안하는 것과 동일한 리팩터링보다 느리게 수행될 때 예를 들어 주시겠습니까? SQL Server 함수의 가장 큰 단점은 자동으로 인라인되지 않을 수 있다는 것입니다.

여러 행에서 작동하는 스칼라 함수의 경우 SQL Server는 결과 집합의 모든 행에 대해 한 번 함수를 실행합니다. 이 문서의 후반부에서 설명 하 듯이 큰 성능 영향을 미칠 수 있습니다. 다행히도 TVF를 사용하면 SQL Server가 결과 집합의 행 수에 관계없이 한 번만 호출되며 약간의 독창성으로 스칼라 함수를 TVF로 다시 작성할 수 있으므로 스칼라에 내재된 행별 처리를 피할 수 있습니다. 함수.

Condividi
Questo articolo è stato pubblicato in Senza categoria . Bookmark permalink .
error

Ti piace quello che facciamo? Ti prego, spargi la voce!