Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2022 (16.x) a novější verze
Azure SQL Database
Azure SQL Managed Instance
V tomto článku se dozvíte, jak vytvořit aktualizovatelnou tabulku registru. V dalším kroku vložíte do aktualizovatelné tabulky registru hodnoty a pak provedete aktualizace dat. Nakonec výsledky zobrazíte pomocí zobrazení hlavní knihy. Použijeme příklad bankovní aplikace, která sleduje zůstatky bankovních zákazníků ve svých účtech. Náš příklad vám poskytne praktický pohled na relaci mezi aktualizovatelnou tabulkou registru a odpovídající tabulkou historie a zobrazením registru.
Požadavky
Vytvoření aktualizovatelné tabulky registru
Vytvoříme tabulku zůstatku účtu s následujícím schématem.
| Název sloupce | Datový typ | Description |
|---|---|---|
| ID zákazníka | int | ID zákazníka – clusterovaný primární klíč |
| Příjmení | varchar (50) | Příjmení zákazníka |
| Křestní jméno | varchar (50) | Jméno zákazníka |
| Zůstatek | desetinné číslo (10,2) | Zůstatek na účtu |
Pomocí aplikace SQL Server Management Studio vytvořte nové schéma a tabulku s názvem
[Account].[Balance].CREATE SCHEMA [Account]; GO CREATE TABLE [Account].[Balance] ( [CustomerID] INT NOT NULL PRIMARY KEY CLUSTERED, [LastName] VARCHAR (50) NOT NULL, [FirstName] VARCHAR (50) NOT NULL, [Balance] DECIMAL (10,2) NOT NULL ) WITH ( SYSTEM_VERSIONING = ON (HISTORY_TABLE = [Account].[BalanceHistory]), LEDGER = ON );Poznámka:
Zadání argumentu
LEDGER = ONje volitelné, pokud jste při vytváření databáze povolili databázi registru.Při vytvoření aktualizovatelné tabulky registru se vytvoří také odpovídající tabulka historie a zobrazení registru. Spuštěním následujících příkazů T-SQL zobrazte novou tabulku a nové zobrazení.
SELECT ts.[name] + '.' + t.[name] AS [ledger_table_name] , hs.[name] + '.' + h.[name] AS [history_table_name] , vs.[name] + '.' + v.[name] AS [ledger_view_name] FROM sys.tables AS t JOIN sys.tables AS h ON (h.[object_id] = t.[history_table_id]) JOIN sys.views v ON (v.[object_id] = t.[ledger_view_id]) JOIN sys.schemas ts ON (ts.[schema_id] = t.[schema_id]) JOIN sys.schemas hs ON (hs.[schema_id] = h.[schema_id]) JOIN sys.schemas vs ON (vs.[schema_id] = v.[schema_id]) WHERE t.[name] = 'Balance';
Vložte jméno
Nick Jonesjako nový zákazník s počátečním zůstatkem 50 USD.INSERT INTO [Account].[Balance] VALUES (1, 'Jones', 'Nick', 50);Vložte jména
John Smith,Joe SmithaMary Michaelsjako nové zákazníky s počátečními zůstatky 500 USD, 30 USD a 200 USD.INSERT INTO [Account].[Balance] VALUES (2, 'Smith', 'John', 500), (3, 'Smith', 'Joe', 30), (4, 'Michaels', 'Mary', 200);[Account].[Balance]Zobrazte aktualizovatelnou tabulku registru a zadejte sloupce GENERATED ALWAYS přidané do tabulky.SELECT [CustomerID] ,[LastName] ,[FirstName] ,[Balance] ,[ledger_start_transaction_id] ,[ledger_end_transaction_id] ,[ledger_start_sequence_number] ,[ledger_end_sequence_number] FROM [Account].[Balance];V okně výsledků se nejprve zobrazí hodnoty vložené příkazy T-SQL spolu se systémovými metadaty používanými pro účely rodokmenu dat.
Sloupec
ledger_start_transaction_idzaznamenává jedinečné ID transakce, která vložila data. ProtožeJohn,JoeaMarybyly vloženy pomocí stejné transakce, sdílejí stejné ID transakce.Sloupec
ledger_start_sequence_numberzaznamenává pořadí, podle kterého byly hodnoty vloženy transakcí.
Aktualizujte zůstatek
Nickz50na100.UPDATE [Account].[Balance] SET [Balance] = 100 WHERE [CustomerID] = 1;[Account].[Balance]Zobrazte zobrazení registru spolu se zobrazením systému registru transakcí a identifikujte uživatele, kteří provedli změny.SELECT t.[commit_time] AS [CommitTime] , t.[principal_name] AS [UserName] , l.[CustomerID] , l.[LastName] , l.[FirstName] , l.[Balance] , l.[ledger_operation_type_desc] AS Operation FROM [Account].[Balance_Ledger] l JOIN sys.database_ledger_transactions t ON t.transaction_id = l.ledger_transaction_id ORDER BY t.commit_time DESC;Návod
Doporučujeme dotazovat se na historii změn prostřednictvím zobrazení účetní knihy, nikoli tabulky historie.
NickZůstatek na účtu byl úspěšně aktualizován v tabulce aktualizovatelných registrů na100.
Zobrazení hlavní knihy ukazuje, že aktualizace tabulky hlavní knihy je kopií původníhoDELETEřádku pomocí50. Nový zůstatek s odpovídajícímINSERTv novém řádku100ukazuje nový zůstatek proNick.
Povolení
Vytváření aktualizovatelných tabulek registru vyžaduje ENABLE LEDGER oprávnění. Další informace o oprávněních souvisejících s tabulkami registru najdete v tématu Oprávnění.