메모리 내 OLTP에 대한 사용자 정의 스칼라 함수Scalar User-Defined Functions for In-Memory OLTP

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터)예Azure SQL Database아니요Azure SQL Data Warehouse아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SQL Server 2016SQL Server 2016에서는 고유하게 컴파일된 사용자 정의 스칼라 함수를 생성 및 삭제할 수 있습니다.In SQL Server 2016SQL Server 2016, you can create and drop natively compiled, scalar user-defined functions. 또한, 이러한 사용자 정의 함수를 변경하는 것도 가능합니다.You can also alter these user-defined functions. 네이티브 컴파일을 사용하면 Transact-SQL에서 사용자 정의 함수의 평가 성능을 향상할 수 있습니다.Native compilation improves performance of the evaluation of user-defined functions in Transact-SQL.

고유하게 컴파일된 사용자 정의 스칼라 함수를 변경하는 경우 작업은 계속 실행되고 함수의 새 버전이 컴파일되는 반면 응용 프로그램을 계속 사용할 수 있습니다.When you alter a natively compiled, scalar user-defined function, the application remains available while the operation is being run and the new version of the function is being compiled.

지원되는 T-SQL 구문에 대한 자세한 내용은 고유하게 컴파일된 T-SQL 모듈에 대해 지원되는 기능을 참조하세요.For supported T-SQL constructs, see Supported Features for Natively Compiled T-SQL Modules.

사용자 정의 함수 생성, 제거 및 변경Creating, Dropping, and Altering User-Defined Functions

CREATE FUNCTION을 사용하여 고유하게 컴파일된 사용자 정의 스칼라 함수를 만들고 DROP FUNCTION을 사용하여 사용자 정의 함수를 삭제하며 ALTER FUNCTION를 사용하여 함수를 변경합니다.You use the CREATE FUNCTION to create the natively compiled, scalar user-defined function, the DROP FUNCTION to remove the user-defined function, and the ALTER FUNCTION to change the function. 사용자 정의 함수에서는 BEGIN ATOMIC WITH가 필수입니다.BEGIN ATOMIC WITH is required for the user-defined functions.

지원되는 구문 및 모든 제한 사항에 대한 정보는 다음 항목을 참조하십시오.For information about the supported syntax and any restrictions, see the following topics.

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  

사용자 정의 함수 호출Calling User-Defined Functions

고유하게 컴파일된 사용자 정의 스칼라 함수는 기본 제공 스칼라 함수 및 해석된 사용자 정의 스칼라 함수의 동일한 위치에 있는 식에서 사용될 수 있습니다.Natively compiled, scalar user-defined functions can be used in expressions, in the same place as built-in scalar functions and interpreted scalar user-defined functions. 또한, 고유하게 컴파일된 사용자 정의 스칼라 함수는 Transact-SQL 문 및 고유하게 컴파일된 저장 프로시저에 있는 EXECUTE 문과 함께 사용될 수 있습니다.Natively compiled, scalar user-defined functions can also be used with the EXECUTE statement, in a Transact-SQL statement and in a natively compiled stored procedure.

이러한 사용자 정의 스칼라 함수는 고유하게 컴파일된 저장 프로시저 및 고유하게 컴파일된 사용자 정의 함수에서 사용할 수 있고 거기에서는 기본 제공 함수가 허용됩니다.You can use these scalar user-defined functions in natively compiled store procedures and natively compiled user-defined functions, and wherever built-in functions are permitted. 또한, 고유하게 컴파일된 사용자 정의 스칼라 함수를 기존 Transact-SQL 모듈에서도 사용할 수 있습니다.You can also use natively compiled, scalar user-defined functions in traditional Transact-SQL modules.

이러한 사용자 정의 스칼라 함수를 interop 모드에서 사용할 수 있고 여기에서는 해석된 사용자 정의 해석 함수도 사용할 수 있습니다.You can use these scalar user-defined functions in interop mode, wherever an interpreted scalar user-defined function can be used. Transactions with Memory-Optimized Tables (메모리 액세스에 최적화된 테이블 트랜잭션)의 크로스 컨테이너 트랜잭션에 대하여 지원되는 격리 수준섹션에서의 설명과 같이 이러한 사용 방법은 크로스 컨테이너 제한 사항에 따라 달라집니다.This use is subject to cross-container transaction limitations, as described in Supported Isolation Levels for Cross-Container Transactions section in Transactions with Memory-Optimized Tables. Interop 모드에 대한 자세한 내용은 해석된 Transact-SQL을 사용하여 메모리 액세스에 최적화된 테이블에 액세스를 참조하세요.For more information about interop mode, see Accessing Memory-Optimized Tables Using Interpreted Transact-SQL.

고유하게 컴파일된 사용자 정의 스칼라 함수에서는 명시적인 실행 컨텍스트가 필요합니다.Natively compiled, scalar user-defined functions do require an explicit execution context. 자세한 내용은 EXECUTE AS 절(Transact-SQL)을 참조하세요.For more information, see EXECUTE AS Clause (Transact-SQL). EXECUTE AS CALLER는 지원되지 않습니다.EXECUTE AS CALLER is not supported. 자세한 내용은 EXECUTE(Transact-SQL)을 참조하세요.For more information, see EXECUTE (Transact-SQL).

고유하게 컴파일된 사용자 정의 스칼라 함수에서 사용할 수 있는 Transact-SQL Execute 문에서 지원되는 구문은 EXECUTE(Transact-SQL)을 참조하세요.For the supported syntax for Transact-SQL Execute statements, for natively compiled, scalar user-defined functions, see EXECUTE (Transact-SQL). 고유하게 컴파일된 저장 프로시저에서 사용자 정의 함수를 실행하기 위해 지원되는 구문은 고유하게 컴파일된 T-SQL 모듈에 대해 지원되는 기능을 참조하세요.For the supported syntax for executing the user-defined functions in a natively compiled stored procedure, see Supported Features for Natively Compiled T-SQL Modules.

힌트와 매개 변수Hints and Parameters

고유하게 컴파일된 사용자 정의 스칼라 함수에서의 테이블, 조인 및 쿼리 힌트에 대한 지원은 고유하게 컴파일된 저장 프로시저에 대한 해당 힌트 지원과 동일합니다.Support for table, join, and query hints inside natively compiled, scalar user-defined functions is equal to support for these hints for natively compiled stored procedures. 해석된 사용자 정의 해석 함수와 동일하게, 고유하게 컴파일된 사용자 정의 스칼라 함수를 참조하는 TRANSACT-SQL 쿼리에 포함된 쿼리 힌트는 이 사용자 정의 함수에 대한 쿼리 계획에 영향을 주지 않습니다.As with interpreted scalar user-defined functions, the query hints included with a Transact-SQL query that reference a natively compiled, scalar user-defined function do not impact the query plan for this user-defined function.

사용자 정의 스칼라 함수에서 매개 변수가 허용되는 한 고유하게 컴파일된 사용자 정의 스칼라 함수에서 지원되는 매개 변수를 고유하게 컴파일된 저장 프로시저에서 지원되는 모든 매개 변수입니다.The parameters supported for the natively compiled, scalar user-defined functions are all the parameters supported for natively compiled stored procedures, as long as the parameters are allowed for scalar user-defined functions. 지원되는 매개 변수의 예는 테이블 반환 매개 변수입니다.An example of a supported parameter is the table-valued parameter.

스키마 바운드Schema-Bound

다음은 고유하게 컴파일된 사용자 정의 스칼라 함수에 적용됩니다.The following apply to natively compiled, scalar user-defined functions.

  • CREATE FUNCTION 및 ALTER FUNCTION에서 WITH SCHEMABINDING 인수를 사용하여 스키마 바운드되어야 합니다.Must be schema-bound, by using the WITH SCHEMABINDING argument in the CREATE FUNCTION and ALTER FUNCTION.

  • 스키마 바운드 저장 프로시저 또는 사용자 정의 함수에 의해 참조되는 경우 삭제하거나 변경할 수 없습니다.Cannot be dropped or altered when referenced by a schema-bound stored procedure or user-defined function.

SHOWPLAN_XMLSHOWPLAN_XML

고유하게 컴파일된 사용자 정의 스칼라 함수는 SHOWPLAN_XML을 지원합니다.Natively compiled, scalar user-defined functions support SHOWPLAN_XML. 고유 하 게 컴파일된 저장 프로시저에서와 같이 일반 SHOWPLAN_XML 스키마를 준수합니다.It conforms to the general SHOWPLAN_XML schema, as with natively compiled stored procedures. 사용자 정의 함수에 대한 기본 요소는 <UDF>입니다.The base element for the user-defined functions is <UDF>.

STATISTICS XML은 고유하게 컴파일된 사용자 정의 스칼라 함수에서 지원되지 않습니다.STATISTICS XML is not supported for natively compiled, scalar user-defined functions. STATISTICS XML이 활성화된 상태에서 사용자 정의 함수를 참조하는 쿼리를 실행하는 경우 사용자 정의 함수에 대한 부분 없이 XML 콘텐츠가 반환됩니다.When you run a query referencing the user-defined function, with STATISTICS XML enabled, the XML content is returned without the part for the user-defined function.

사용 권한Permissions

고유하게 컴파일된 저장 프로시저에서와 같이, 고유하게 컴파일된 사용자 정의 스칼라 함수에서 참조되는 개체 권한은 함수가 생성될 때 확인됩니다.As with natively compiled stored procedures, the permissions for objects referenced from a natively compiled, scalar user-defined function are checked when the function is created. 가장된 사용자가 올바른 권한을 가지고 있지 않은 경우 CREATE FUNCTION이 실패합니다.The CREATE FUNCTION fails if the impersonated user does not have the correct permissions. 권한이 변경되어 가장된 사용자가 올바른 권한을 더 이상 갖지 못하는 경우 이후의 사용자 정의 함수 실행이 실패합니다.If permission changes result in the impersonated user no longer having the correct permissions, subsequent executions of the user-defined function fail.

고유하게 컴파일된 저장 프로시저에서 고유하게 컴파일된 사용자 정의 스칼라 함수를 사용하는 경우 외부 프로시저가 생성될 때 사용자 정의 함수 실행 권한이 확인됩니다.When you use a natively compiled, scalar user-defined function inside a natively compiled stored procedure, the permissions for executing the user-defined function are checked when the outer procedure is created. 외부 프로시저에 의해 가장된 사용자가 사용자 정의 함수에 대한 EXEC 권한을 가지고 있지 않으면 저장 프로시저 생성이 실패합니다.If the user impersonated by the outer procedure does not have EXEC permissions for the user-defined function, the creation of the stored procedure fails. 사용 권한이 변경되어 사용자가 EXEC 권한을 더 이상 갖지 않으면 외부 프로시저 실행이 실패합니다.If permission changes result in the user no longer having the EXEC permissions, the execution of the outer procedure fails.

참고 항목See Also

기본 제공 함수s(Transact-SQL) Built-in Functions (Transact-SQL)
XML 형식으로 실행 계획 저장Save an Execution Plan in XML Format