Jeg ser også dette.
Når RCSI er aktiveret, fungerer automatisk commit-transaktioner på standard read committed-niveau fint, når to forekomster af tabellen i hukommelsen sammenføjes.
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
Også at forbinde to forskellige "normale" hukommelsesoptimerede tabeller fungerer fint uden nogen hints.
Derudover fungerer det fint at forbinde en tom hukommelsesoptimeret tabeltype med en normal hukommelsesoptimeret tabel.
DECLARE @t [dbo].[tType];
SELECT *
FROM [dbo].[tTable] t
INNER JOIN @t
ON [@t].C = t.C
Men det omvendte er ikke sandt. Så længe instansen af tabeltypen i hukommelsen indeholder mindst én række, opstår fejlen ved at forbinde den til en (tom eller på anden måde) i hukommelsestabel.
Løsningen er enkel og er angivet i fejlmeddelelsen. Bare tilføj tabeltip 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
Eller en mindre granulær løsning er
ALTER DATABASE [MemOptimized]
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON WITH ROLLBACK IMMEDIATE
Så vidt jeg kan forstå, ændrer ingen af disse faktisk semantikken, og muligheden for at udelade hintet under nogle omstændigheder er blot en programmeringsbekvemmelighed.
Jeg er ikke sikker på, hvorfor denne blanding af forskellige hukommelsestabeltyper forårsager denne særlige fejlmeddelelse. Jeg antager, at det kun er en artefakt af at være en CTP, og at ved RTM enten vil kombinationen være tilladt, eller også vil fejlmeddelelsen og dokumentationen blive opdateret, så den ikke kun refererer til diskbaserede tabeller.