Виждам и това.
Когато RCSI е активиран, тогава транзакциите с автоматичен ангажимент на нивото на ангажимент за четене по подразбиране работят добре при обединяване на два екземпляра от типа таблица в паметта.
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
Също така свързването на две различни "нормални" таблици, оптимизирани за памет, работи добре без никакви съвети.
Освен това свързването на празен тип таблица, оптимизирана за памет, към нормална таблица, оптимизирана за памет, работи добре.
DECLARE @t [dbo].[tType];
SELECT *
FROM [dbo].[tTable] t
INNER JOIN @t
ON [@t].C = t.C
Но обратното не е вярно. Докато екземплярът на типа таблица в паметта съдържа поне един ред, тогава присъединяването му към (празна или друга) таблица в паметта води до грешка.
Решението е просто и е посочено в съобщението за грешка. Просто добавете подсказката за таблицата 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 или комбинацията ще бъде разрешена, или съобщението за грешка и документацията ще бъдат актуализирани, за да се отнасят не само за таблици, базирани на диск.