고유하게 컴파일된 저장 프로시저 만들기Creating Natively Compiled Stored Procedures

이 항목은 다음에 적용됩니다. 예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

고유하게 컴파일된 저장 프로시저는 전체 Transact-SQLTransact-SQL 프로그래밍 기능 및 쿼리 노출 영역을 구현하지 않습니다.Natively compiled stored procedures do not implement the full Transact-SQLTransact-SQL programmability and query surface area. 일부 Transact-SQLTransact-SQL 구문은 고유하게 컴파일된 저장 프로시저 내에서 사용할 수 없습니다.There are certain Transact-SQLTransact-SQL constructs that cannot be used inside natively compiled stored procedures. 자세한 내용은 고유하게 컴파일된 T-SQL 모듈에 대해 지원되는 기능을 참조하세요.For more information, see Supported Features for Natively Compiled T-SQL Modules.

하지만 몇 가지 Transact-SQLTransact-SQL 기능은 고유하게 컴파일된 저장 프로시저에서만 지원됩니다.There are, however, several Transact-SQLTransact-SQL features that are only supported for natively compiled stored procedures:

  • ATOMIC 블록Atomic blocks. 자세한 내용은 Atomic Blocks을 참조하세요.For more information, see Atomic Blocks.

  • 매개 변수 및 변수에 대한 NOT NULL 제약 조건입니다.NOT NULL constraints on parameters and variables. NULL 값을 NOT NULL로 선언된 매개 변수 또는 변수에 할당할 수 없습니다.You cannot assign NULL values to parameters or variables declared as NOT NULL. 자세한 내용은 DECLARE @local_variable(Transact-SQL)을 참조하세요.For more information, see DECLARE @local_variable (Transact-SQL).

    • CREATE PROCEDURE dbo.myproc (@myVarchar varchar(32) not null) ...CREATE PROCEDURE dbo.myproc (@myVarchar varchar(32) not null) ...

    • DECLARE @myVarchar varchar(32) not null = "Hello"; -- (값으로 초기화해야 함)DECLARE @myVarchar varchar(32) not null = "Hello"; -- (Must initialize to a value.)

    • SET @myVarchar = null; -- (컴파일되지만 런타임 중에 실패함)SET @myVarchar = null; -- (Compiles, but fails during run time.)

  • 고유하게 컴파일된 저장 프로시저의 스키마 바인딩Schema binding of natively compiled stored procedures.

    고유하게 컴파일된 저장 프로시저는 CREATE PROCEDURE(Transact-SQL)를 사용하여 만듭니다.Natively compiled stored procedures are created using CREATE PROCEDURE (Transact-SQL). 다음 예에서는 메모리 액세스에 최적화된 테이블과 해당 테이블에 행을 삽입하는 데 사용되는 고유하게 컴파일된 저장 프로시저를 보여 줍니다.The following example shows a memory-optimized table and a natively compiled stored procedure used for inserting rows into the table.

create table dbo.Ord  
(OrdNo integer not null primary key nonclustered,   
 OrdDate datetime not null,   
 CustCode nvarchar(5) not null)   
 with (memory_optimized=on)  
go  

create procedure dbo.OrderInsert(@OrdNo integer, @CustCode nvarchar(5))  
with native_compilation, schemabinding  
as   
begin atomic with  
(transaction isolation level = snapshot,  
language = N'English')  

  declare @OrdDate datetime = getdate();  
  insert into dbo.Ord (OrdNo, CustCode, OrdDate) values (@OrdNo, @CustCode, @OrdDate);  
end  
go  

코드 샘플에서 NATIVE_COMPILATION 은 이 Transact-SQLTransact-SQL 저장 프로시저가 고유하게 컴파일된 저장 프로시저임을 나타냅니다.In the code sample, NATIVE_COMPILATION indicates that this Transact-SQLTransact-SQL stored procedure is a natively compiled stored procedure. 다음 옵션이 필요합니다.The following options are required:

옵션Option 설명Description
SCHEMABINDINGSCHEMABINDING 고유하게 컴파일된 저장 프로시저는 참조하는 개체의 스키마에 바인딩되어야 합니다.A natively compiled stored procedure must be bound to the schema of the objects it references. 이는 프로시저에서 참조하는 테이블을 삭제할 수 없음을 의미합니다.This means that tables referenced by the procedure cannot be dropped. 프로시저에서 참조되는 테이블에는 해당 스키마 이름을 포함해야 하며 쿼리에 와일드카드(*)를 사용할 수 없습니다( SELECT * from...을 의미하지 않음).Tables referenced in the procedure must include their schema name, and wildcards (*) are not allowed in queries (meaning no SELECT * from...). SCHEMABINDING 은 이 버전의 SQL ServerSQL Server에서 고유하게 컴파일된 저장 프로시저에 대해서만 지원됩니다.SCHEMABINDING is only supported for natively compiled stored procedures in this version of SQL ServerSQL Server.
BEGIN ATOMICBEGIN ATOMIC 고유하게 컴파일된 저장 프로시저의 본문은 단 하나의 ATOMIC 블록으로 구성되어야 합니다.The natively compiled stored procedure body must consist of exactly one atomic block. ATOMIC 블록은 저장 프로시저의 원자성 실행을 보장합니다.Atomic blocks guarantee atomic execution of the stored procedure. 프로시저가 활성 트랜잭션의 컨텍스트 외부에서 호출되면 새 트랜잭션을 시작하며 ATOMIC 블록의 끝에서 커밋합니다.If the procedure is invoked outside the context of an active transaction, it will start a new transaction, which commits at the end of the atomic block. 고유하게 컴파일된 저장 프로시저의 ATOMIC 블록에는 다음과 같은 두 가지 필수 옵션이 있습니다.Atomic blocks in natively compiled stored procedures have two required options:

TRANSACTION ISOLATION LEVEL입니다.TRANSACTION ISOLATION LEVEL. 지원되는 격리 수준은 메모리 액세스에 최적화된 테이블에 대한 트랜잭션 격리 수준 을 참조하세요.See Transaction Isolation Levels for Memory-Optimized Tables for supported isolation levels.

LANGUAGE입니다.LANGUAGE. 저장 프로시저의 언어는 사용 가능한 언어 또는 언어 별칭 중 하나로 설정되어야 합니다.The language for the stored procedure must be set to one of the available languages or language aliases.

참고 항목See Also

고유하게 컴파일된 저장 프로시저Natively Compiled Stored Procedures