ストアド プロシージャから TempDB 内のテーブルを作成およびアクセスする
適用対象: SQL Server Azure SQL Database Azure 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 の構造