ストアド プロシージャから TempDB 内のテーブルを作成およびアクセスする

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

ネイティブ コンパイル ストアド プロシージャからの TempDB 内のテーブルの作成およびアクセスはサポートされていません。 代わりに、DURABILITY=SCHEMA_ONLY のメモリ最適化テーブルまたはテーブルの種類とテーブル変数を使用します。

一時テーブルのメモリ最適化およびテーブルのシナリオの詳細については、「メモリ最適化を使用した一時テーブルとテーブル変数の高速化」を参照してください。

次の例では、3 つの列 (ID、ProductID、Quantity) がある temp テーブルの使用を、dbo.OrderQuantityByProduct 型のテーブル変数 @OrderQuantityByProduct を使用して置き換える方法を示します。

CREATE TYPE dbo.OrderQuantityByProduct   
  AS TABLE   
   (id INT NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT=100000),   
    ProductID INT NOT NULL,   
    Quantity INT NOT NULL) WITH (MEMORY_OPTIMIZED=ON)  
GO  
CREATE PROCEDURE dbo.usp_OrderQuantityByProduct   
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER  
AS BEGIN ATOMIC WITH   
(  
    TRANSACTION ISOLATION LEVEL = SNAPSHOT,  
    LANGUAGE = N'ENGLISH'  
)  
  -- declare table variables for the list of orders   
  DECLARE @OrderQuantityByProduct dbo.OrderQuantityByProduct  
  
  -- populate input  
  INSERT @OrderQuantityByProduct SELECT ProductID, Quantity FROM dbo.[Order Details]  
  end  

参照

ネイティブ コンパイル ストアド プロシージャの移行に関する問題
インメモリ OLTP でサポートされていない Transact-SQL の構造