Ik zie dit ook.
Als RCSI is ingeschakeld, werken automatische vastleggingstransacties op het standaard leescommit-niveau prima wanneer twee instanties van het in-geheugentabeltype worden samengevoegd.
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
Ook het samenvoegen van twee verschillende "normale" geheugen-geoptimaliseerde tabellen werkt prima zonder enige hints.
Bovendien werkt het samenvoegen van een leeg, voor geheugen geoptimaliseerd tabeltype aan een normale voor geheugen geoptimaliseerde tabel prima.
DECLARE @t [dbo].[tType];
SELECT *
FROM [dbo].[tTable] t
INNER JOIN @t
ON [@t].C = t.C
Maar het omgekeerde is niet waar. Zolang de instantie van het type tabel in het geheugen ten minste één rij bevat, wordt de fout veroorzaakt door deze samen te voegen met een (lege of andere) tabel in het geheugen.
De oplossing is eenvoudig en wordt aangegeven in de foutmelding. Voeg gewoon de tabelhint toe 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
Of een minder gedetailleerde oplossing is
ALTER DATABASE [MemOptimized]
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON WITH ROLLBACK IMMEDIATE
Voor zover ik kan achterhalen, verandert geen van beide de semantiek en de mogelijkheid om de hint in sommige omstandigheden weg te laten is slechts een programmeergemak.
Ik weet niet zeker waarom deze mix van verschillende typen geheugentabel deze specifieke foutmelding veroorzaakt. Ik neem aan dat het slechts een artefact is van het zijn van een CTP en dat bij RTM de combinatie wordt toegestaan of dat de foutmelding en documentatie worden bijgewerkt om niet alleen naar schijfgebaseerde tabellen te verwijzen.