고유하게 컴파일된 저장 프로시저 만들기
적용 대상: 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 지원되는 격리 수준은 메모리 최적화 테이블에 대한 트랜잭션 격리 수준을 참조하세요. 언어. 저장 프로시저의 언어는 사용 가능한 언어 또는 언어 별칭 중 하나로 설정해야 합니다. |