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


CSERÉLHETŐ ASZTAL (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

A visszaküldések megváltoztatják a táblázat követési adatait. Ezt az utasítást használhatod az összes változás visszaküldésére egy táblában, vagy egy adott sorhoz tartozó változáskövetési információhoz.

Transact-SQL szintaxis konvenciók

Szemantika

CHANGETABLE (  
    { CHANGES <table_name> , <last_sync_version> 
    | VERSION <table_name> , <primary_key_values> } 
    , [ FORCESEEK ] 
    )  
[AS] <table_alias> [ ( <column_alias> [ ,...n ] )  
  
<primary_key_values> ::=  
( <column_name> [ , ...n ] ) , ( <value> [ , ...n ] )  

Arguments

VÁLTOZÁSOK table_name, last_sync_version
Visszaadja a táblázatban megjelent összes változás követését, amely a last_sync_version által meghatározott verzió óta történt.

table_name
Ez a felhasználó által definiált táblázat, amelyen nyomon követett változásokat lehet elérni. A változáskövetést be kell kapcsolni az asztalon. Használható egy-, két-, három- vagy négyrészes táblanév. A tábla neve szinonimája lehet a táblával.

last_sync_version
Egy nullálható bigint skalárérték. Egy kifejezés szintaktishibat okoz. Ha az érték NULL, minden nyomon követett változtatás visszatér. Amikor a hívásokat eléri, a hívó alkalmazásnak meg kell határoznia, hogy melyik pontból kell változtatni. A last_sync_version ezt a pontot megadja. A függvény minden olyan sorra vonatkozó információt ad, amelyeket az adott verzió óta megváltoztattak. Az alkalmazás lekérdezést keres, hogy olyan verzióval rendelkező változtatásokat kapjon, amely nagyobb a last_sync_version. Általában a változtatások megszerzése előtt az alkalmazás hívja CHANGE_TRACKING_CURRENT_VERSION() , hogy megszerezze azt a verziót, amelyet a következő módosítás szükségessége esetén használni fog. Ezért a kérelemnek nem kell értelmeznie vagy megértenie a tényleges értéket. Mivel last_sync_version a hívó alkalmazás által megszerzik, az alkalmazásnak meg kell őriznie az értéket. Ha az alkalmazás elveszíti ezt az értéket, akkor újra kell inicializálnia az adatokat. last_sync_version ellenőrizni kell, hogy ne legyen túl régi, mert előfordulhat, hogy a változási információk egy részét vagy egészét az adatbázis által beállított megőrzési idő szerint törölték. További információért lásd a CHANGE_TRACKING_MIN_VALID_VERSION (Transact-SQL) és ALTER DATABASE SET Options (Transact-SQL) oldalt.

VERSION table_name, { primary_key_values }
A megadott sorhoz tartozó legfrissebb változáskövetési információt adja vissza. Az elsődleges kulcsértékeknek azonosítaniuk kell a sort. primary_key_values azonosítja a fő kulcsoszlopokat és megadja az értékeket. A fő kulcsoszlop nevei bármilyen sorrendben megadhatók.

table_name
Ez a felhasználó által definiált táblázat, amelyen a változáskövetési információkat lehet megszerezni. A változáskövetést be kell kapcsolni az asztalon. Használható egy-, két-, három- vagy négyrészes táblanév. A tábla neve szinonimája lehet a táblával.

column_name
Megadja az elsődleges kulcsoszlop vagy oszlopok nevét. Több oszlopnév bármilyen sorrendben megadható.

value
Az elsődleges kulcs értéke. Ha több fő kulcsoszlop van, az értékeket ugyanabban a sorrendben kell megadni, mint ahogy az oszlopok a column_name listában megjelennek.

[ FORCESEEK ]
Vonatkozik a következőkre: SQL Server (Starting with SQL Server 2016 (13.x) SP2 CU16, SQL Server 2017 (14.x) CU24 and SQL Server 2019 (15.x) CU11), Azure SQL Database és Azure SQL Managed Instance

Opcionális paraméter, amely keresési műveletet kényszerít a table_name eléréséhez. Néhány esetben, amikor nagyon kevés sor változott, a table_name eléréséhez még mindig használható szkennelési művelet. Ha egy szkennelési művelet teljesítményproblémát okoz, használd a FORCESEEK paramétert.

[HANGJA] table_alias [ (column_alias [ ,... n ] ) ] ]
Megadja a CHANGETABLE által visszaadott eredmények neveit.

table_alias
Ez a táblázat aliasneve, amelyet a CHANGETABLE visszaad. table_alias kötelező, és érvényesnek kell lennie.

column_alias
Ez egy opcionális oszlop alias vagy oszlop alias-listája azokhoz az oszlopokhoz, amelyeket a CHANGETABLE által visszaadnak. Ez lehetővé teszi az oszlopnevek testreszabását, ha az eredményekben duplikált nevek lennének.

Visszatérési típusok

table

Értékek visszaadva

CSERÉLHETŐ VÁLTOZTATÁSOK

Amikor a CHANGES megadásra kerül, visszakerül a nulla vagy több sor a következő oszlopokkal.

Oszlop név Adattípus Description
SYS_CHANGE_VERSION bigint A sor utolsó változásához tartozó verzióérték
SYS_CHANGE_CREATION_VERSION bigint Verzióértékek, amelyek az utolsó beszúrási művelethez kapcsolódnak.
SYS_CHANGE_OPERATION nchar(1) Megadja a változtatás típusát:

U = Frissítés

I = Insert

D = Törlés
SYS_CHANGE_COLUMNS varbinary(4100) Felsorolja azokat az oszlopokat, amelyek a last_sync_version óta változtak (az alapvonal). Fontos megjegyezni, hogy a kiszámított oszlopokat soha nem tüntetik fel változtatottként.

Az érték NULL, ha az alábbi feltételek bármelyike igaz:

Az oszlopváltás követése nincs engedélyezve.

A művelet egy beadás vagy törlés művelet.

Minden nem elsődleges kulcsoszlopot egyetlen műveletben frissítettek. Ezt a bináris értéket nem szabad közvetlenül értelmezni. Ehelyett az értelmezéshez használjuk a CHANGE_TRACKING_IS_COLUMN_IN_MASK()-t.
SYS_CHANGE_CONTEXT varbinary(128) Módosítsd a kontextusinformációt, amelyet opcionálisan megadhatsz a WITH záradékon az INSERT, UPDATE vagy DELETE utasítás részeként.
<Elsődleges kulcsoszlop értéke> Ugyanaz, mint a felhasználói tábla oszlopok A követett tábla elsődleges kulcsértékei. Ezek az értékek egyedileg azonosítják a felhasználói tábla minden sorát.

CSERÉLHETŐ VERZIÓ

Amikor a VERZIÓ megadásra kerül, egy sor jelenik meg, amelyben a következő oszlopok találhatók.

Oszlop név Adattípus Description
SYS_CHANGE_VERSION bigint A sorhoz tartozó aktuális verzió érték.

Az érték NULL, ha a változás nem történt hosszabb időnél, mint a változáskövetés megtartási ideje, vagy a sor nem változott a változáskövetés engedélyezése óta.
SYS_CHANGE_CONTEXT varbinary(128) Módosítsd a kontextusinformációt, amelyet opcionálisan megadhatsz a WITH záradékon az INSERT, UPDATE vagy DELETE utasítás részeként.
<Elsődleges kulcsoszlop értéke> Ugyanaz, mint a felhasználói tábla oszlopok A követett tábla elsődleges kulcsértékei. Ezek az értékek egyedileg azonosítják a felhasználói tábla minden sorát.

Megjegyzések

A CHANGETABLE függvényt általában a lekérdezés FROM klauzulájában használják, mintha az egy tábla lenne.

CSERÉLŐASZTAL(VÁLTOZTATÁS...)

Új vagy módosított sorok soradatainak megszerzéséhez az eredményhalmazt a felhasználói tábla összekapcsolásával a fő kulcsoszlopok használatával. Csak egy sor jelenik meg minden megváltoztatott sorért a felhasználói táblaban, még akkor is, ha ugyanazon sorban többször is változott a last_sync_version érték óta.

A fő kulcsoszlop változtatásait soha nem jelölik frissítésként. Ha egy elsődleges kulcsérték megváltozik, azt a régi érték törlésének és az új érték beillesztésének tekintik.

Ha törölsz egy sort, majd beillesztel egy sort, amelyen a régi elsődleges kulcs van, a változás az összes oszlop frissítésének számít.

Az és SYS_CHANGE_COLUMNS oszlopok értékei SYS_CHANGE_OPERATION a megadott alapvonalhoz (last_sync_version) viszonyítva vannak. Például, ha egy beillesztési műveletet a verziónál 10 , egy frissítési műveletet pedig , 15és ha az alap last_sync_version12, akkor frissítést jelentenek. Ha a last_sync_version érték 8, egy betétet jelentenek. SYS_CHANGE_COLUMNS soha nem jelenti a kiszámított oszlopokat frissítettnek.

Általánosságban minden olyan műveletet, amely adatokat illeszt, frissít vagy töröl a felhasználói táblákból, nyomon követik, beleértve a MERGE utasítást is.

Az alábbi műveleteket, amelyek a felhasználói tábla adatait érintik, nem kerülnek nyomon követésre:

  • Végrehajtom a UPDATETEXT nyilatkozatot. Ez az utasítás elavult, és a jövőbeli SQL Server verzióban eltávolítják. Azonban a UPDATE utasítás záradékával végrehajtott változtatásokat .WRITE nyomon követik.

  • Sorok törlése .TRUNCATE TABLE Amikor egy táblát lerövidítenek, a táblához kapcsolódó változáskövetési verzió információi úgy indulnak vissza, mintha a változáskövetést most engedélyezték volna a táblán. Egy kliens alkalmazásnak mindig validálnia kell az utolsó szinkronizált verzióját. Az ellenőrzés akkor hiús, ha a táblát lerövidítették.

CSERÉLŐASZTAL (VERZIÓ...)

Üres eredményhalmazt adnak vissza, ha nem létező elsődleges kulcsot jelölünk meg.

Az értéke SYS_CHANGE_VERSION NULL lehet, ha a változás nem történt tovább a megtartási időszaknál (például a tisztítás eltávolította a változási információt), vagy a sor soha nem változott, mióta a változáskövetés engedélyezve volt a táblán.

Permissions

A változáskövetési információ megszerzéséhez szükséges SELECT a fő kulcsoszlopok és VIEW CHANGE TRACKING a table_name> érték által meghatározott táblázat< engedélye.

Példák

A. Sorok visszaküldése az adatok kezdeti szinkronizálásához

Az alábbi példa bemutatja, hogyan lehet adatokat szerezni a tábla adatainak kezdeti szinkronizálásához. A lekérdezés visszaadja az összes soradatot és a hozzájuk tartozó verziókat. Ezután beillesztheted vagy hozzáadhatod ezt az adatot a rendszerbe, amely tartalmazza a szinkronizált adatokat.

-- Get all current rows with associated version  
SELECT e.[Emp ID], e.SSN, e.FirstName, e.LastName,  
    c.SYS_CHANGE_VERSION, c.SYS_CHANGE_CONTEXT  
FROM Employees AS e  
CROSS APPLY CHANGETABLE   
    (VERSION Employees, ([Emp ID], SSN), (e.[Emp ID], e.SSN)) AS c;  

B. Minden változást felsorolok, amelyeket egy adott verzió óta hajtottak végre

Az alábbi példa felsorolja az összes változást, amelyet egy táblázatban a megadott verzió (@last_sync_version). [EMP ID] és az SSN egy összetett elsődleges kulcs oszlopai.

DECLARE @last_sync_version bigint;  
SET @last_sync_version = <value obtained from query>;  
SELECT [Emp ID], SSN,  
    SYS_CHANGE_VERSION, SYS_CHANGE_OPERATION,  
    SYS_CHANGE_COLUMNS, SYS_CHANGE_CONTEXT   
FROM CHANGETABLE (CHANGES Employees, @last_sync_version) AS C;  

C. Minden megváltoztatott adat szinkronizációhoz való beszerzése

Az alábbi példa bemutatja, hogyan lehet megszerezni az összes megváltozott adatot. Ez a lekérdezés összekapcsolja a változáskövető információkat a felhasználói táblával, így a felhasználói tábla adatai visszakerülnek. Az A LEFT OUTER JOIN sor azért van használatban, hogy a törölt sorok esetén visszatérjen a sor.

-- Get all changes (inserts, updates, deletes)  
DECLARE @last_sync_version bigint;  
SET @last_sync_version = <value obtained from query>;  
SELECT e.FirstName, e.LastName, c.[Emp ID], c.SSN,  
    c.SYS_CHANGE_VERSION, c.SYS_CHANGE_OPERATION,  
    c.SYS_CHANGE_COLUMNS, c.SYS_CHANGE_CONTEXT   
FROM CHANGETABLE (CHANGES Employees, @last_sync_version) AS c  
    LEFT OUTER JOIN Employees AS e  
        ON e.[Emp ID] = c.[Emp ID] AND e.SSN = c.SSN;  

D. Ütközések észlelése a CHANGETABLE(VERZIÓ...) használatával

A következő példa azt mutatja, hogyan lehet egy sort csak akkor frissíteni, ha a sor az utolsó szinkronizáció óta nem változott. Az adott sor verziószáma a használatával CHANGETABLEkapható . Ha a sor frissült, nem történik változtatás, és a lekérdezés visszaadja az utolsó módosítást a sorban.

-- @last_sync_version must be set to a valid value  
UPDATE  
    SalesLT.Product  
SET  
    ListPrice = @new_listprice  
FROM  
    SalesLT.Product AS P  
WHERE  
    ProductID = @product_id AND  
    @last_sync_version >= ISNULL (  
        (SELECT CT.SYS_CHANGE_VERSION FROM   
            CHANGETABLE(VERSION SalesLT.Product,  
            (ProductID), (P.ProductID)) AS CT),  
        0);  

Lásd még:

Változáskövetési funkciók (Transact-SQL)
Adatváltozások nyomon követése (SQL Server)
CHANGE_TRACKING_IS_COLUMN_IN_MASK (Transact-SQL)
CHANGE_TRACKING_CURRENT_VERSION (Transact-SQL)
CHANGE_TRACKING_MIN_VALID_VERSION (Transact-SQL)