sql >> Databasteknik >  >> RDS >> Sqlserver

In-Memory användardefinierad tabell, inte i minnet?

Jag ser detta också.

När RCSI är aktiverat fungerar automatisk commit-transaktioner på standard läs committed-nivå bra när två instanser av tabelltypen i minnet kopplas samman.

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 

Också att ansluta två olika "normala" minnesoptimerade tabeller fungerar bra utan några tips.

Att dessutom ansluta en tom minnesoptimerad tabelltyp till en normal minnesoptimerad tabell fungerar bra.

DECLARE @t [dbo].[tType];

SELECT *
FROM   [dbo].[tTable] t
        INNER JOIN @t
            ON [@t].C = t.C 

Men det omvända är inte sant. Så länge som instansen av tabelltypen i minnet innehåller minst en rad, uppstår felet om den kopplas till en (tom eller på annat sätt) i minnestabell.

Lösningen är enkel och anges i felmeddelandet. Lägg bara till tabelltipset 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 är

ALTER DATABASE [MemOptimized] 
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON WITH ROLLBACK IMMEDIATE 

Såvitt jag kan förstå ändrar ingen av dessa faktiskt semantiken och möjligheten att utelämna ledtråden under vissa omständigheter är bara en programmeringsbekvämlighet.

Jag är inte säker på varför denna blandning av olika typer av minnestabeller orsakar just detta felmeddelande. Jag antar att det bara är en artefakt av att vara en CTP och att vid RTM kommer antingen kombinationen att tillåtas eller så kommer felmeddelandet och dokumentationen att uppdateras för att inte bara referera till diskbaserade tabeller.



  1. PHP och kapsla in MySQL-rader i en JSON-array

  2. Exempel på JDBC-uttalande – Infoga, Ta bort, Uppdatera, Välj post

  3. MySQL Ändra tabell, lägg till kolumn med unikt slumpmässigt värde

  4. hur sparar man pdf-rapporter automatiskt i databasen?