First public versionv0.1.0previewlatest
- Open a SQL Server backup file without a SQL Server: backup sets, database files and every table with its rows and size
- Look inside a table: its columns and its first 1,000 rows, straight from the backup
- Restore only what you need: export tables to CSV or copy them into a database on any SQL Server
- Compressed, encrypted (WITH ENCRYPTION and TDE, with your certificate) and striped backups
- Combine a differential backup with its full backup to see the database as of the differential
- Free to open and look at any backup; a license key exports and copies all rows (without one, the first 1,000 rows of each table). Automatic updates
SQLTreeo Restore is a Windows desktop tool that opens SQL Server backup files (.bak) by itself, without a SQL Server, and shows what is inside: the backup sets, the database files and every table with its row count and size. You can look at the columns and the first rows of any table, and restore only the tables you need, to CSV files or into a database on a SQL Server. The backup file is only read; nothing in it is changed.
This is the first public version. It has been tested with backups of SQL Server 2019, 2022 and 2025.
What is in a backup
Open a .bak file from the start page, from the list of recent files, or by dragging it onto the window. SQLTreeo Restore shows:
- Every backup set in the file: full, differential or log, when it was made and by whom, the server and SQL Server version, the size, and whether it is copy-only, compressed or encrypted. A file with several appended backup sets lists them all.
- The database files with their filegroups and sizes.
- The user tables with schema, row count and size (reserved, data, index and unused, as sp_spaceused reports them), heap or clustered, the number of indexes, and when they were created and last changed.
- For a table you pick: its columns with their data types, and its first 1,000 rows.
Large backups open without reading the whole file: where every page is follows from the database’s own allocation pages, so listing the tables reads a few megabytes instead of the whole file (a 10.7 GB backup opens in well under a second instead of 14 seconds; on a network share the difference is larger still), and only the pages of the tables you look at are read. Every page read is checked against the page itself; when a backup does not follow the expected layout (striped backups always), it is read in one pass with progress in percent and gigabytes, and you can cancel. The index of a backup is saved, so the same file opens at once next time, also after a restart (Settings › Data, “Clear index cache”). The file is never locked while it is open. Closing the window while an export or copy runs asks first and waits until the table being copied is rolled back. When an export or copy ends with tables that failed or are incomplete, the first three are named and “Show all” lists every one.
Kinds of backups
- Compressed backups (WITH COMPRESSION) open like uncompressed ones.
- Encrypted backups open with the certificate and its private key: backups made WITH ENCRYPTION (AES) and backups of databases encrypted with TDE, compressed or not. Add the certificate (.cer and .pvk as exported with BACKUP CERTIFICATE, and its password) under Settings › Certificates, or with “Add certificate…” in the warning of a backup that needs it. The password is stored encrypted for your Windows account. TRIPLE_DES_3KEY is not supported.
- Striped backups (one backup written to several files): open any of the files and SQLTreeo Restore reads all files of the backup from the same folder. A missing file is reported, and a table whose description is in the missing file says so.
- Differential backups: “Combine with full backup…” finds the full backup the differential was made on (in the same file, the same folder, or a file you choose) and shows the tables and rows as they were at the differential. A full backup it does not belong to is refused.
- A backup file that is cut off, for example by an interrupted copy, shows what is in it with a warning that it is incomplete.
- Rows that are not in the backup are never shown as an empty table or a finished export: when a table of a differential on its own, a cut-off file or a striped backup with a file missing gives fewer rows than its row count, the preview says rows are missing and an export or copy names the table as incomplete. A row whose values stored outside the row are cut off counts as missing too. Exporting or copying such a backup asks first.
- Log backups (.trn) open from the open dialog, by dragging them onto the window or from the command line, and show what is in them.
Restore only what you need
Tick the tables you want and:
- Export to CSV: one UTF-8 file per table that opens in Excel, with dates, times and GUIDs written as SQL Server Management Studio shows them. A table that cannot be read is named with the reason and the others are still exported; a file gets its name only when it is complete, so a cancelled export leaves no cut-off file. Files that are in the folder already are replaced only after you say so.
- Copy to SQL Server: the tables are copied into a database on a SQL Server of your choice, created if it does not exist. A table that does not exist there is created with the same columns, types and collations, its primary key, unique constraints and clustered index, its computed columns, sparse columns and column set (other indexes, foreign keys, check constraints and triggers are not created). When tables exist already they are checked first and you choose once: add the rows (a row whose key is there already fails that table, which is then left as it was), replace their rows, or cancel. Each table is copied completely or not at all: if a table fails or you cancel, it is left exactly as it was. An existing table whose columns do not fit is left as it is, with the reason (for example a column that is too short, NOT NULL where the backup has empty values, or text in a collation that cannot hold all its characters). Rows added to an existing table must meet its foreign keys and check constraints. Replace rows never empties a table that other tables refer to; empty it yourself or add the rows instead. sql_variant values keep their own type (with its precision, scale, length and collation) and their value exactly; a table with sql_variant values is written with INSERT statements, which takes longer, and fires the triggers of an existing table.
Data that can be read
All common data types, including decimal, money, every date and time type, character data in every collation, binary, uniqueidentifier, xml, sql_variant and rowversion; values stored off the row such as varchar(max), nvarchar(max), varbinary(max), xml, text and image; heaps with forwarded rows, tables with dropped or added columns, tables on several files and filegroups, and tables with ROW or PAGE compression, columnstore indexes or sparse columns.
Tables with ROW or PAGE compression read like any other table, including compressed heaps with forwarded rows, tables rebuilt with compression and tables with compressed and uncompressed partitions; so do tables with sparse columns, and a column set shows the same xml as SQL Server does.
Tables with a clustered columnstore index read like any other table too: every data type a columnstore can hold, the compressed row groups and the rows still waiting in the delta store, (max) values kept outside the row groups, partitioned tables, rebuilt indexes and tables whose columns were added or dropped later. Rows that were deleted or updated after their row group was compressed are left out, exactly as SQL Server leaves them out. Rows come in the order SQL Server keeps them in each row group, which is not the order they were inserted in. A table with a nonclustered columnstore index reads from its ordinary rows.
Memory-optimized tables and a column set over a sql_variant column are listed with their sizes, but their rows cannot be read in this version; the table says why.
License
Opening backups and looking at them is free, without a time limit: the backup sets, database files, tables, columns and the data preview. Exporting and copying data needs a license key; there is no trial.
Without a key you can still try Export to CSV and Copy to SQL Server: they write the first 1,000 rows of each table, with their exact values, clearly marked. The CSV files are named “dbo.Orders (first 1000 rows - unlicensed).csv”, copied tables get the suffix _preview (dbo.Orders_preview), and the outcome says for example “1,000 of 8,412,905 rows exported (unlicensed preview)”. With a license key every row is exported and copied. Copying data out of the preview and the sqlrestore command line (apart from info, blocks and license) need a license key. Enter or buy a key under Settings › License.
Installing
Setup installs SQLTreeo Restore for your Windows user, without administrator rights, and keeps it up to date automatically. A portable zip is available too; it does not update itself.