다음을 통해 공유


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

적용 대상: SQL Server Azure SQL 데이터베이스 Azure 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 저장 프로시저가 고유하게 컴파일된 저장 프로시저임을 나타냅니다. 다음 옵션이 필요합니다.

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

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

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

참고 항목

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