これも見えます。
RCSIが有効になっている場合、メモリ内のテーブルタイプの2つのインスタンスを結合すると、デフォルトの読み取りコミットレベルでの自動コミットトランザクションが正常に機能します。
DECLARE @t1 [dbo].[tType]
DECLARE @t2 [dbo].[tType]
INSERT INTO @t1 VALUES (1);
INSERT INTO @t2 VALUES (1);
SELECT *
FROM @t1
JOIN @t2
ON [@t1].C = [@t2].C
また、2つの異なる「通常の」メモリ最適化テーブルを結合すると、ヒントがなくても正常に機能します。
さらに、空のメモリ最適化テーブルタイプを通常のメモリ最適化テーブルに結合することは正常に機能します。
DECLARE @t [dbo].[tType];
SELECT *
FROM [dbo].[tTable] t
INNER JOIN @t
ON [@t].C = t.C
しかし、その逆は真実ではありません。メモリ内のテーブルタイプのインスタンスに少なくとも1つの行が含まれている限り、それをメモリ内のテーブル(空またはその他)に結合するとエラーが発生します。
解決策は簡単で、エラーメッセージに示されています。テーブルヒントWITH (SNAPSHOT)
を追加するだけです
DECLARE @t [dbo].[tType]
INSERT INTO @t
VALUES (1)
SELECT *
FROM [dbo].[tTable] t WITH(SNAPSHOT)
INNER JOIN @t
ON [@t].C = t.C
または、より詳細でないソリューションは
ALTER DATABASE [MemOptimized]
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON WITH ROLLBACK IMMEDIATE
私が収集できる限り、これらのどちらも実際にはセマンティクスを変更せず、状況によってはヒントを省略できるのはプログラミングの便宜にすぎません。
このメモリテーブルタイプの違いがこの特定のエラーメッセージを引き起こす理由がわかりません。これはCTPであるという単なるアーティファクトであり、RTMでは組み合わせが許可されるか、ディスクベースのテーブルだけでなくエラーメッセージとドキュメントが更新されると思います。