Membuat dan menggunakan tabel ledger yang dapat diperbarui
Berlaku untuk: SQL Server 2022 (16.x) Azure SQL Database Azure SQL Managed Instance
Artikel ini memperlihatkan kepada Anda cara membuat tabel ledger yang dapat diperbarui. Berikutnya, Anda akan menyisipkan nilai dalam tabel ledger yang dapat diperbarui, lalu memperbarui data. Terakhir, Anda akan melihat hasilnya dengan menggunakan tampilan ledger. Kami akan menggunakan contoh aplikasi perbankan yang melacak saldo nasabah perbankan di rekening mereka. Contoh kami akan memberi Anda pandangan praktis tentang hubungan antara tabel ledger yang dapat diperbarui dan tabel riwayat serta tampilan ledger yang sesuai.
Prasyarat
Membuat tabel ledger yang dapat diperbarui
Kami akan membuat tabel saldo rekening dengan skema berikut.
Nama kolom | Jenis data | Deskripsi |
---|---|---|
CustomerID | int | ID Nasabah - Kluster kunci primer |
LastName | varchar (50) | Nama belakang nasabah |
FirstName | varchar (50) | Nama depan nasabah |
Saldo | desimal (10,2) | Saldo rekening |
Gunakan SQL Server Management Studio atau Azure Data Studio untuk membuat skema dan tabel baru yang disebut
[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 );
Catatan
LEDGER = ON
Menentukan argumen bersifat opsional jika Anda mengaktifkan database ledger saat membuat database Anda.Saat tabel ledger yang dapat diperbarui dibuat, tabel riwayat dan tampilan ledger yang sesuai juga dibuat. Jalankan perintah T-SQL berikut ini untuk melihat tabel baru dan tampilan baru.
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';
Masukkan nama
Nick Jones
sebagai nasabah baru dengan saldo awal sebesar $50.INSERT INTO [Account].[Balance] VALUES (1, 'Jones', 'Nick', 50);
Masukkan nama
John Smith
,Joe Smith
, danMary Michaels
sebagai nasabah baru dengan saldo awal masing-masing $500, $30, dan $200.INSERT INTO [Account].[Balance] VALUES (2, 'Smith', 'John', 500), (3, 'Smith', 'Joe', 30), (4, 'Michaels', 'Mary', 200);
Tampilkan tabel ledger
[Account].[Balance]
yang dapat diperbarui dan sebutkan kolom GENERATED ALWAYS yang ditambahkan ke tabel.SELECT [CustomerID] ,[LastName] ,[FirstName] ,[Balance] ,[ledger_start_transaction_id] ,[ledger_end_transaction_id] ,[ledger_start_sequence_number] ,[ledger_end_sequence_number] FROM [Account].[Balance];
Di jendela hasil, Anda akan melihat terlebih dahulu nilai yang disisipkan oleh perintah T-SQL, bersama dengan metadata sistem yang digunakan untuk tujuan silsilah data.
Kolom
ledger_start_transaction_id
mencatat ID transaksi unik yang terkait dengan transaksi yang menyisipkan data. KarenaJohn
,Joe
, danMary
disisipkan menggunakan transaksi yang sama, mereka memiliki ID transaksi yang sama.Kolom
ledger_start_sequence_number
mencatat urutan nilai yang disisipkan oleh transaksi.
Perbarui saldo
Nick
dari50
ke100
.UPDATE [Account].[Balance] SET [Balance] = 100 WHERE [CustomerID] = 1;
[Account].[Balance]
Lihat tampilan ledger, bersama dengan tampilan sistem ledger transaksi untuk mengidentifikasi pengguna yang membuat perubahan.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;
Tip
Kami menyarankan agar Anda meminta kueri untuk riwayat perubahan melalui tampilan ledger, bukan tabel riwayat.
Saldo rekening
Nick
telah berhasil diperbarui dalam tabel ledger yang dapat diperbarui menjadi100
.
Tampilan ledger menunjukkan bahwa pembaruan tabel ledgernya adalahDELETE
baris asli dengan saldo50
. Saldo denganINSERT
baris baru yang sesuai dengan saldo100
menunjukkan saldo baru untukNick
.
Izin
Membuat tabel ledger yang dapat diperbarui memerlukan ENABLE LEDGER
izin. Untuk informasi tentang izin yang terkait dengan tabel ledger, lihat Izin.