SQL Server 2014 の In-Memory OLTP のメモリ最適化テーブルでは一時テーブルを作成来ることはできません。 ![]()
ただし、メモリ最適化テーブルデータ型 (Memory-Optimized Table Type) を作成することができます。
Transact-SQL によるインメモリ OLTP のサポート
CREATE TYPE (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
ユーザー定義テーブル型を新規作成する際に [ユーザー定義の目盛最適化テーブルの型] を作成することができます。
以下のようなクエリでメモリ最適化テーブルのデータ型を作成することができます。
USE HekatonDB
GO
IF TYPE_ID('dbo.MemoryTableType') IS NOT NULL
DROP TYPE dbo.MemoryTableType
GO
CREATE TYPE dbo.MemoryTableType AS TABLE
(
c1 int NOT NULL,
c2 int NOT NULL,
c3 int NOT NULL INDEX ix_MemoryTT_c3 NONCLUSTERED (c3),
c4 int NOT NULL INDEX hash_index_MemoryTT_c4 NONCLUSTERED HASH (c4) WITH(BUCKET_COUNT = 10000),
PRIMARY KEY NONCLUSTERED (c1),
INDEX hash_index_MemoryTT_c3 HASH (c2) WITH (BUCKET_COUNT = 10000)
) WITH (MEMORY_OPTIMIZED = ON)
GO
これでユーザー定義テーブル型として登録されますので、これを一時的にデータを格納するテーブルとして利用することができます。
DECLARE @MemoryTableType MemoryTableType INSERT INTO @MemoryTableType VALUES(1,1,1,1) SELECT * FROM @MemoryTableType GO DECLARE @MemoryTableType MemoryTableType SELECT * FROM @MemoryTableType GO
ネイティブコンパイルされたストアドプロシージャーでは一時テーブルや通常のユーザー定義のテーブル型は作成できませんが、メモリ最適化テーブル型であれば使用できますので、一時的にデータを格納したい場合などはこれを使うとよさそうです。