sql >> Database teknologi >  >> RDS >> Sqlserver

In-Memory brugerdefineret tabel, ikke i hukommelsen?

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.



  1. Sammenligning af Cloud Database-indstillinger for PostgreSQL

  2. PHP-login ved hjælp af MySQL-data og hashed adgangskode

  3. Sådan driver du et job oprettet via pgagent i Postgres

  4. Vælg rækker med flere tags... er der en bedre måde?