다음을 통해 공유


사용자 정의 함수 디자인 지침

사용자 정의 함수는 데이터베이스 개체로 저장되어 다음과 같은 사항에서 다시 사용할 수 있는 코드를 제공합니다.

  • SELECT 등의 Transact-SQL 문

  • 함수를 호출하는 응용 프로그램

  • 다른 사용자 정의 함수의 정의

  • 뷰를 매개 변수화하거나 인덱싱된 뷰의 기능 향상

  • 테이블의 열 정의

  • 열에 CHECK 제약 조건 정의

  • 저장 프로시저 바꾸기

함수 유형 선택

사용자 정의 함수를 디자인 할 때는 먼저 용도에 맞는 함수의 유형을 결정해야 합니다. 다음과 같은 함수의 용도를 고려합니다.

  • 스칼라 값(단일 값) 반환

  • 테이블(여러 행) 반환

  • 복잡한 계산 수행

  • 주로 SQL Server 데이터 액세스

Transact-SQL 또는 .NET Framework로 작성된 사용자 정의 함수는 스칼라 값과 테이블 값을 모두 반환할 수 있습니다.

함수의 속성

함수를 호출하는 계산 열의 인덱스를 통해 또는 해당 함수를 참조하는 인덱싱된 뷰를 통해 SQL Server 데이터베이스 엔진의 함수 결과 인덱싱 기능을 결정하는 사용자 정의 함수의 속성에는 여러 가지가 있습니다. 이러한 속성은 CLR User-Defined Types 메서드에도 적용할 수 있습니다.

결정성

결정적 함수는 데이터베이스의 상태가 같을 경우 특정 입력 값 집합으로 호출될 때마다 항상 동일한 결과를 반환합니다. 비결정적 함수는 액세스하는 데이터베이스의 상태가 동일하게 유지되더라도 특정 입력 값 집합으로 호출될 때마다 다른 결과를 반환할 수 있습니다.

데이터베이스 엔진은 자동으로 Transact-SQL 함수의 본문을 분석하여 함수가 결정적인지 여부를 평가합니다. 예를 들어 함수가 비결정적인 다른 함수를 호출하거나 확장된 저장 프로시저를 호출하면 데이터베이스 엔진은 해당 함수를 비결정적인 것으로 표시합니다. CLR(공용 언어 런타임) 함수의 경우 데이터베이스 엔진은 함수의 작성자를 기준으로 SqlFunction 사용자 지정 특성을 사용하여 함수가 결정적인지 여부를 표시합니다.

정확성

사용자 정의 함수는 부동 소수점 연산과 관련이 없는 경우 정확한 것으로 간주됩니다.

데이터베이스 엔진은 자동으로 Transact-SQL 함수의 본문을 분석하여 함수가 정확한지 여부를 평가합니다. CLR 함수의 경우 데이터베이스 엔진은 함수의 작성자를 기준으로 SqlFunction 사용자 지정 특성을 사용하여 함수가 정확한지 여부를 표시합니다.

데이터 액세스

이 속성은 함수가 SQL Server 종속 프로세스 관리 공급자를 사용하여 로컬 데이터베이스 서버에 액세스하는지 여부를 나타냅니다. 자세한 내용은 CLR 데이터베이스 개체에서 데이터 액세스을 참조하십시오.

데이터베이스 엔진은 자동으로 Transact-SQL 함수의 본문을 분석하여 함수가 데이터 액세스를 수행하는지 여부를 평가합니다. CLR 함수의 경우 데이터베이스 엔진은 함수의 작성자를 기준으로 SqlFunction 사용자 지정 특성을 사용하여 데이터 액세스 특징을 나타냅니다. 이 속성은 데이터베이스 엔진에 의해 실행 시 적용됩니다. 함수가 DataAccess = None으로 나타내지만 데이터 액세스를 수행하는 경우 실행 시에 오류가 발생합니다.

시스템 데이터 액세스

이 속성은 함수가 SQL Server 종속 프로세스 관리 공급자를 사용하여 로컬 데이터베이스 서버의 시스템 메타데이터에 액세스하는지 여부를 나타냅니다.

데이터베이스 엔진은 자동으로 Transact-SQL 함수의 본문을 분석하여 함수가 시스템 데이터 액세스를 수행하는지 여부를 평가합니다. CLR 함수의 경우 데이터베이스 엔진은 함수의 작성자를 기준으로 SqlFunction 사용자 지정 특성을 사용하여 시스템 데이터 액세스 특징을 나타냅니다. 이 속성은 데이터베이스 엔진에 의해 실행 시 적용됩니다. 함수가 SystemDataAccess = None으로 나타내지만 시스템 데이터 액세스를 수행하는 경우 실행 시에 오류가 발생합니다.

IsSystemVerified

이 속성은 데이터베이스 엔진에서 함수의 결정성 및 정확성 속성을 확인할 수 있는지 여부를 나타냅니다. 이 속성은 Transact-SQL 함수가 IsSystemVerified = false로 표시된 함수를 호출하지 않는 한 해당 함수에 대해 true입니다. CLR 함수에 대해서는 false입니다.

데이터베이스 엔진은 함수의 IsSystemVerified 속성을 자동으로 생성합니다. Transact-SQL 함수의 경우 IsSystemVerified = false로 표시된 함수를 액세스하면 해당 함수 자체도 IsSystemVerified = false로 표시됩니다.

인덱싱된 계산 열과 인덱싱된 뷰의 함수에 대한 자세한 내용은 계산 열에 인덱스 만들기인덱싱된 뷰 만들기를 참조하십시오.