ネイティブ コンパイル ストアド プロシージャの作成

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

ネイティブ コンパイル ストアド プロシージャでは、完全な Transact-SQL プログラミングとクエリの対象領域は実装されません。 ネイティブ コンパイル ストアド プロシージャ内では使用できない特定の Transact-SQL コンストラクトがあります。 詳細については、「 ネイティブ コンパイル T-SQL モジュールでサポートされる機能」を参照してください。

次の Transact-SQL 機能は、ネイティブ コンパイル ストアド プロシージャでのみサポートされています。

  • ATOMIC ブロック。 詳細については、「 Atomic Blocks」を参照してください。

  • パラメーターおよび変数に対する NOT NULL 制約。 NULL として宣言されているパラメーターまたは変数に NOT 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 ネイティブ コンパイル ストアド プロシージャの本体は、厳密に 1 つの ATOMIC ブロックで構成されている必要があります。 ATOMIC ブロックでは、ストアド プロシージャのアトミック実行が保証されます。 プロシージャをアクティブなトランザクションのコンテキストの外部で呼び出した場合、新しいトランザクションが開始され、ATOMIC ブロックの末尾でコミットされます。 ネイティブ コンパイル ストアド プロシージャの ATOMIC ブロックには、次の 2 つの必須オプションがあります。

TRANSACTION ISOLATION LEVEL。 サポートされる分離レベルについては、「 メモリ最適化テーブルのトランザクション分離 」を参照してください。

LANGUAGE。 ストアド プロシージャの言語は、使用可能な言語または言語の別名の 1 つに設定されている必要があります。

参照

ネイティブ コンパイル ストアド プロシージャ