Megosztás a következőn keresztül:


Memóriaoptimalizált rendszerverziójú időbeli táblákkal végzett munka

A következőkre vonatkozik: Sql Server 2016 (13.x) és újabb verziók felügyelt Azure SQL-példány

Ez a cikk azt ismerteti, hogy a memóriaoptimalizált rendszerverziójú temporális táblák használata miben különbözik a lemezalapú, rendszerverziós időtábláktól.

Jegyzet

A memóriaoptimalizált időtáblák csak az SQL Serverben és az Azure SQL Managed Instance-ben érhetők el. A memóriaoptimalizált táblák és az időtáblák egymástól függetlenül érhetők el az Azure SQL Database-ben.

Metaadatok felderítése

A memóriaoptimalizált rendszerverziójú időtáblák metaadatainak felderítéséhez egyesítenie kell sys.tables és sys.internal_tablesadatait. A rendszer által verziózott időbeli tábla a belső memóriabeli előzménytábla parent_object_id-jeként van ábrázolva.

Ez a példa bemutatja, hogyan kérdezheti le és illesztheti be ezeket a táblákat.

SELECT SCHEMA_NAME(T1.schema_id) AS TemporalTableSchema,
    OBJECT_NAME(IT.parent_object_id) AS TemporalTableName,
    T1.object_id AS TemporalTableObjectId,
    IT.Name AS InternalHistoryStagingName,
    SCHEMA_NAME(T2.schema_id) AS HistoryTableSchema,
    OBJECT_NAME(T1.history_table_id) AS HistoryTableName
FROM sys.internal_tables IT
INNER JOIN sys.tables T1
    ON IT.parent_object_id = T1.object_id
INNER JOIN sys.tables T2
    ON T1.history_table_id = T2.object_id
WHERE T1.is_memory_optimized = 1
    AND T1.temporal_type = 2;

Adatok módosítása

A memóriaoptimalizált temporális táblák natívan lefordított tárolt eljárásokkal módosíthatók, amelyek lehetővé teszik a nem időalapú memóriaoptimalizált táblák konvertálását és a meglévő natívan tárolt eljárások megtartását.

Ez a példa azt mutatja be, hogyan módosítható a korábban létrehozott tábla natív fordítású modulban.

CREATE PROCEDURE dbo.UpdateFXCurrencyPair (
    @ProviderID INT,
    @CurrencyID1 INT,
    @CurrencyID2 INT,
    @BidRate DECIMAL(8, 4),
    @AskRate DECIMAL(8, 4)
)
WITH NATIVE_COMPILATION, SCHEMABINDING,
EXECUTE AS OWNER
AS
BEGIN ATOMIC
   WITH (
      TRANSACTION ISOLATION LEVEL = SNAPSHOT,
      LANGUAGE = N'English'
   )
   UPDATE dbo.FXCurrencyPairs
   SET AskRate = @AskRate,
      BidRate = @BidRate
   WHERE ProviderID = @ProviderID
      AND CurrencyID1 = @CurrencyID1
      AND CurrencyID2 = @CurrencyID2
END
GO;