고유하게 컴파일된 저장 프로시저 만들기

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

고유하게 컴파일된 저장 프로시저는 전체 Transact-SQL 프로그래밍 기능 및 쿼리 노출 영역을 구현하지 않습니다. 고유하게 컴파일된 저장 프로시저 내에서 사용할 수 없는 특정 Transact-SQL 구문이 있습니다. 자세한 내용은 고유하게 컴파일된 T-SQL 모듈에 대해 지원되는 기능을 참조 하세요.

다음 Transact-SQL 기능은 고유하게 컴파일된 저장 프로시저에 대해서만 지원됩니다.

  • 원자성 블록. 자세한 내용은 Atomic Blocks을(를) 참조하십시오.

  • 매개 변수 및 변수에 대한 NOT NULL 제약 조건입니다. NOT NULL선언된 매개 변수 또는 변수에는 NULL 값을 할당할 수 없습니다. 자세한 내용은 DECLARE @local_variable (Transact-SQL)를 참조하세요.

    • CREATE PROCEDURE dbo.myproc (@myVarchar VARCHAR(32) NOT NULL) AS (...)

    • DECLARE @myVarchar VARCHAR(32) NOT NULL = "Hello"; -- Must initialize to a value.

    • SET @myVarchar = NULL; -- Compiles, but fails during run time.

  • 고유하게 컴파일된 저장 프로시저의 스키마 바인딩입니다.

고유하게 컴파일된 저장 프로시저는 CREATE PROCEDURE(Transact-SQL)를 사용하여 생성됩니다. 다음 예제에서는 메모리 최적화 테이블과 테이블에 행을 삽입하는 데 사용되는 고유하게 컴파일된 저장 프로시저를 보여 줍니다.

CREATE TABLE [dbo].[T2] (  
  [c1] [int] NOT NULL, 
  [c2] [datetime] NOT NULL,
  [c3] nvarchar(5) NOT NULL, 
  CONSTRAINT [PK_T1] PRIMARY KEY NONCLUSTERED ([c1])  
  ) WITH ( MEMORY_OPTIMIZED = ON , DURABILITY = SCHEMA_AND_DATA )  
GO  
  
CREATE PROCEDURE [dbo].[usp_2] (@c1 int, @c3 nvarchar(5)) 
WITH NATIVE_COMPILATION, SCHEMABINDING  
AS BEGIN ATOMIC WITH  
(  
 TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english'  
)  
  DECLARE @c2 datetime = GETDATE();  
  INSERT INTO [dbo].[T2] (c1, c2, c3) values (@c1, @c2, @c3);  
END  
GO  

코드 샘플 에서 NATIVE_COMPILATION 이 Transact-SQL 저장 프로시저가 고유하게 컴파일된 저장 프로시저임을 나타냅니다. 다음 옵션이 필요합니다.

옵션 설명
스키마바인딩 고유하게 컴파일된 저장 프로시저는 참조하는 개체의 스키마에 바인딩되어야 합니다. 즉, 프로시저에서 참조하는 테이블을 삭제할 수 없습니다. 프로시저에서 참조되는 테이블에는 스키마 이름이 포함되어야 하며 쿼리에서 와일드카드(*)는 허용되지 않습니다(아니요 SELECT * from...). SCHEMABINDING 은 이 버전의 SQL Server에서 고유하게 컴파일된 저장 프로시저에 대해서만 지원됩니다.
BEGIN ATOMIC 고유하게 컴파일된 저장 프로시저 본문은 정확히 하나의 원자성 블록으로 구성되어야 합니다. 원자성 블록은 저장 프로시저의 원자성 실행을 보장합니다. 프로시저가 활성 트랜잭션의 컨텍스트 외부에서 호출되면 원자성 블록의 끝에 커밋되는 새 트랜잭션이 시작됩니다. 고유하게 컴파일된 저장 프로시저의 원자성 블록에는 다음 두 가지 필수 옵션이 있습니다.

트랜잭션 격리 수준입니다. 지원되는 격리 수준은 메모리 최적화 테이블에 대한 트랜잭션 격리 수준을 참조하세요.

언어. 저장 프로시저의 언어는 사용 가능한 언어 또는 언어 별칭 중 하나로 설정해야 합니다.

참고 항목

고유하게 컴파일된 저장 프로시저