메모리 내 OLTP에 대한 사용자 정의 스칼라 함수
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
SQL Server 2016(13.x)에서는 고유하게 컴파일된 사용자 정의 스칼라 함수를 생성 및 삭제할 수 있습니다. 이러한 사용자 정의 함수를 변경할 수도 있습니다. 네이티브 컴파일을 사용하면 Transact-SQL에서 사용자 정의 함수의 평가 성능을 향상할 수 있습니다.
고유하게 컴파일된 스칼라 사용자 정의 함수를 변경하면 작업을 실행하고 새 버전의 함수를 컴파일하는 동안에도 애플리케이션을 계속 사용할 수 있습니다.
지원되는 T-SQL 구문은 고유하게 컴파일된 T-SQL 모듈에 대해 지원되는 기능을 참조하세요.
사용자 정의 함수 만들기, 삭제 및 변경
CREATE FUNCTION을 사용하여 네이티브 컴파일된 스칼라 사용자 정의 함수를 만들고, DROP FUNCTION을 사용하여 사용자 정의 함수를 제거하며 ALTER FUNCTION을 사용하여 함수를 변경합니다. BEGIN ATOMIC WITH는 사용자 정의 함수에 필요합니다.
지원되는 구문 및 제한 사항에 대한 자세한 내용은 다음 항목을 참조하세요.
-
고유하게 컴파일된 스칼라 사용자 정의 함수에 대한 DROP FUNCTION 구문은 해석된 사용자 정의 함수의 경우와 동일합니다.
sp_recompile(Transact-SQL) 저장 프로시저는 고유하게 컴파일된 스칼라 사용자 정의 함수와 함께 사용할 수 있습니다. 이를 통해 메타데이터에 존재하는 정의를 사용하여 함수를 컴파일할 수 있습니다.
다음 예제는 AdventureWorks2022 예제 데이터베이스의 스칼라 UDF를 보여줍니다.
CREATE FUNCTION [dbo].[ufnLeadingZeros_native](@Value int)
RETURNS varchar(8)
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')
DECLARE @ReturnValue varchar(8);
SET @ReturnValue = CONVERT(varchar(8), @Value);
DECLARE @i int = 0, @count int = 8 - LEN(@ReturnValue)
WHILE @i < @count
BEGIN
SET @ReturnValue = '0' + @ReturnValue;
SET @i += 1
END
RETURN (@ReturnValue);
END
사용자 정의 함수 호출
고유하게 컴파일된 스칼라 사용자 정의 함수는 기본 제공 스칼라 함수 및 해석된 스칼라 사용자 정의 함수와 동일하게 위치한 식에서 사용할 수 있습니다. 또한, 고유하게 컴파일된 사용자 정의 스칼라 함수는 Transact-SQL 문 및 고유하게 컴파일된 저장 프로시저에 있는 EXECUTE 문과 함께 사용될 수 있습니다.
이러한 사용자 정의 스칼라 함수는 고유하게 컴파일된 저장 프로시저 및 고유하게 컴파일된 사용자 정의 함수에서 사용할 수 있고 거기에서는 기본 제공 함수가 허용됩니다. 기존 Transact-SQL 모듈에서 고유하게 컴파일된 스칼라 사용자 정의 함수를 사용할 수도 있습니다.
해석된 스칼라 사용자 정의 함수를 사용할 수 있는 모든 경우 InterOp 모드에서 이러한 스칼라 사용자 정의 함수를 사용할 수 있습니다. 이 사용은 메모리 최적화 테이블이 있는 트랜잭션의 컨테이너 간 트랜잭션에 대해 지원되는 격리 수준에 설명된 대로 컨테이너 간 트랜잭션 제한 사항이 적용됩니다. InterOp 모드에 대한 자세한 내용은 해석된 Transact-SQL을 사용하여 메모리 최적화 테이블에 액세스를 참조하세요.
고유하게 컴파일된 스칼라 사용자 정의 함수에는 명시적 실행 컨텍스트가 필요합니다. 자세한 내용은 EXECUTE AS 절(Transact-SQL)을 참조하세요. EXECUTE AS CALLER는 지원되지 않습니다. 자세한 내용은 EXECUTE(Transact-SQL)를 참조하세요.
고유하게 컴파일된 스칼라 사용자 정의 함수에 대한 Transact-SQL Execute 문에 지원되는 구문은 EXECUTE(Transact-SQL)를 참조하세요. 고유하게 컴파일된 저장 프로시저에서 사용자 정의 함수를 실행하기 위한 지원되는 구문은 고유하게 컴파일된 T-SQL 모듈에 대해 지원되는 기능을 참조하세요.
힌트 및 매개 변수
고유하게 컴파일된 스칼라 사용자 정의 함수 내에서 테이블, 조인 및 쿼리 힌트에 대한 지원은 고유하게 컴파일된 저장 프로시저에 대해 이러한 힌트를 지원하는 것과 같습니다. 해석된 스칼라 사용자 정의 함수와 마찬가지로 고유하게 컴파일된 스칼라 사용자 정의 함수를 참조하는 Transact-SQL 쿼리에 포함된 쿼리 힌트는 이 사용자 정의 함수에 대한 쿼리 계획에 영향을 주지 않습니다.
고유하게 컴파일된 스칼라 사용자 정의 함수에 지원되는 매개 변수는 스칼라 사용자 정의 함수에 대해 매개 변수가 허용되는 한 고유하게 컴파일된 저장 프로시저에서 지원되는 모든 매개 변수입니다. 지원되는 매개 변수의 예는 테이블 반환 매개 변수입니다.
스키마 바운드
다음은 고유하게 컴파일된 사용자 정의 스칼라 함수에 적용됩니다.
CREATE FUNCTION 및 ALTER FUNCTION에서 WITH SCHEMABINDING 인수를 사용하여 스키마 바운드되어야 합니다.
스키마 바인딩 저장 프로시저 또는 사용자 정의 함수에서 참조하는 경우 삭제하거나 변경할 수 없습니다.
SHOWPLAN_XML
고유하게 컴파일된 스칼라 사용자 정의 함수는 SHOWPLAN_XML을 지원합니다. 고유 하 게 컴파일된 저장 프로시저에서와 같이 일반 SHOWPLAN_XML 스키마를 준수합니다. 사용자 정의 함수의 기본 요소는 <UDF>
입니다.
STATISTICS XML은 고유하게 컴파일된 사용자 정의 스칼라 함수에서 지원되지 않습니다. STATISTICS XML을 사용하도록 설정된 사용자 정의 함수를 참조하는 쿼리를 실행하면 사용자 정의 함수에 대한 부분 없이 XML 콘텐츠가 반환됩니다.
사용 권한
고유하게 컴파일된 저장 프로시저와 마찬가지로 고유하게 컴파일된 스칼라 사용자 정의 함수에서 참조되는 개체에 대한 권한은 함수를 만들 때 검사합니다. 가장된 사용자에게 올바른 권한이 없으면 CREATE FUNCTION이 실패합니다. 사용 권한이 변경되면 가장된 사용자에게 더 이상 올바른 권한이 없어 사용자 정의 함수의 후속 실행이 실패합니다.
고유하게 컴파일된 저장 프로시저 내에서 고유하게 컴파일된 스칼라 사용자 정의 함수를 사용하는 경우 외부 프로시저를 만들 때 사용자 정의 함수를 실행하는 권한을 검사합니다. 외부 프로시저에서 가장한 사용자에게 사용자 정의 함수에 대한 EXEC 권한이 없으면 저장 프로시저를 만들지 못합니다. 권한 변경으로 인해 사용자에게 EXEC 권한이 더 이상 없으면 외부 프로시저 실행이 실패합니다.