Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op: SQL Server 2022 (16.x)
Azure SQL Database
Azure SQL Managed Instance
In dit artikel leest u hoe u een updatable tabel voor grootboek maakt. Vervolgens voegt u waarden in uw updatable grootboektabel in en voert u vervolgens updates uit voor de gegevens. Ten slotte bekijkt u de resultaten met behulp van de grootboekweergave. We gebruiken een voorbeeld van een banktoepassing waarmee de saldo's van bankklanten in hun rekeningen worden bijgehouden. In ons voorbeeld krijgt u een praktisch inzicht in de relatie tussen de bijwerkbare grootboektabel en de bijbehorende geschiedenistabel en grootboekweergave.
Vereiste voorwaarden
Een updatable grootboektabel maken
We maken een saldotabel voor accounts met het volgende schema.
| Kolomnaam | Gegevenstype | Description |
|---|---|---|
| KlantID | int | Klant-id - Primaire sleutel geclusterd |
| Achternaam | varchar (50) | Achternaam van klant |
| Voornaam | varchar (50) | Voornaam van klant |
| Saldo | decimaal (10,2) | Saldo van rekening |
Gebruik SQL Server Management Studio om een nieuw schema en een nieuwe tabel met de naam
[Account].[Balance]te maken.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 );Opmerking
LEDGER = ONHet argument opgeven is optioneel als u een grootboekdatabase hebt ingeschakeld bij het maken van uw database.Wanneer uw bijwerkbare grootboektabel wordt gemaakt, worden ook de bijbehorende geschiedenistabel en grootboekweergave gemaakt. Voer de volgende T-SQL-opdrachten uit om de nieuwe tabel en de nieuwe weergave te bekijken.
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';
Voeg de naam
Nick Jonesin als een nieuwe klant met een openingssaldo van $ 50.INSERT INTO [Account].[Balance] VALUES (1, 'Jones', 'Nick', 50);Voeg de namen
John Smithin,Joe SmithenMary Michaelsals nieuwe klanten met een openingssaldo van respectievelijk $ 500, $ 30 en $ 200.INSERT INTO [Account].[Balance] VALUES (2, 'Smith', 'John', 500), (3, 'Smith', 'Joe', 30), (4, 'Michaels', 'Mary', 200);Bekijk de
[Account].[Balance]tabel van het bijwerkbare grootboek en specificeer de GEGENEREERDE ALWAYS-kolommen die aan de tabel zijn toegevoegd.SELECT [CustomerID] ,[LastName] ,[FirstName] ,[Balance] ,[ledger_start_transaction_id] ,[ledger_end_transaction_id] ,[ledger_start_sequence_number] ,[ledger_end_sequence_number] FROM [Account].[Balance];In het resultatenvenster ziet u eerst de waarden die zijn ingevoegd door uw T-SQL-opdrachten, samen met de systeemmetagegevens die worden gebruikt voor gegevensherkomstdoeleinden.
De
ledger_start_transaction_idkolom noteert de unieke transactie-id die is gekoppeld aan de transactie die de gegevens heeft ingevoegd. OmdatJohn,JoeenMaryzijn ingevoegd met behulp van dezelfde transactie, delen ze dezelfde transactie-id.De
ledger_start_sequence_numberkolom noteert de volgorde waarin de waarden door de transactie zijn ingevoegd.
Werk het saldo van
Nickbij van50naar100.UPDATE [Account].[Balance] SET [Balance] = 100 WHERE [CustomerID] = 1;Bekijk de
[Account].[Balance]grootboekweergave, samen met de systeemweergave van het transactieboek om gebruikers te identificeren die de wijzigingen hebben aangebracht.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;Aanbeveling
U wordt aangeraden een query uit te voeren op de geschiedenis van wijzigingen via de grootboekweergave en niet op de geschiedenistabel.
Nick's rekeningsaldo is succesvol bijgewerkt in de aanpasbare grootboektabel op100.
In de grootboekweergave ziet u dat het bijwerken van de grootboektabel bestaat uit eenDELETEvan de oorspronkelijke rij, met50. Het saldo met een overeenkomstigeINSERTvan een nieuwe rij met100toont het nieuwe saldo voorNick.
Permissions
Voor het maken van updatable grootboektabellen is de ENABLE LEDGER machtiging vereist. Zie Machtigingen voor meer informatie over machtigingen met betrekking tot grootboektabellen.