Skip to content
dbSlice®
Product Who it's for Performance Pricing Blog Guides Support Buy dbSlice

dbSlice / Migrate

Firebird to SQL Server migration, on Windows

Many business systems built on Firebird are moving to SQL Server. dbSlice copies the tables from a Windows app or the command line, and keeps SQL Server in sync with Firebird while both systems run side by side.

Try it free on the Microsoft Store ↗ See pricing

At a glance

  • What it does: copies Firebird tables into SQL Server and keeps SQL Server in sync while both systems run.
  • Engines: Firebird to SQL Server; also PostgreSQL, MySQL, MariaDB, Oracle, SQLite or InterSystems IRIS, and back into Firebird.
  • What it does not do: convert stored procedures, triggers or PSQL code to T-SQL, or detect deletes in incremental runs.
  • Free or paid: try it in the free Microsoft Store version (no license key); writing to a target database needs a Desktop or Server license.

Data, not code

dbSlice moves data: tables, rows, keys and types. It does not convert PSQL procedures or triggers to T-SQL; plan that part separately. Most Firebird systems keep business rules in triggers and procedures, and no tool converts all of it automatically.

dbSlice Synchronize tab

What dbSlice does

  • Connects to Firebird with the database path or alias, as your application does.
  • Reads in small batches, so the production database keeps serving its users.
  • Shows the target DDL. If the SQL Server table does not exist, dbSlice stops before writing and shows a CREATE TABLE translated from Firebird for your DBA to review and run. It does not create objects in your databases by itself.
  • Masks on the way when the copy is for development or testing.

How column types are suggested

FirebirdSuggested in SQL ServerReview before running
SMALLINT, INTEGER, BIGINTSMALLINT, INT, BIGINT—
NUMERIC(p,s), DECIMAL(p,s)DECIMAL(p,s)—
FLOAT, DOUBLE PRECISIONFLOAT—
DATE, TIMEDATE, TIME—
TIMESTAMPDATETIME2—
CHAR(n), VARCHAR(n)NVARCHAR(n), or NVARCHAR(MAX) above 4,000CHAR padding is not kept
BOOLEANBIT—
BLOB SUB_TYPE 1 (text)NVARCHAR(MAX)—
BLOB (binary)VARBINARY(MAX)—
Firebird 4 and 5: DECFLOAT, INT128, TIME/TIMESTAMP WITH TIME ZONENVARCHAR(MAX)Change to DECIMAL(38,s) or DATETIMEOFFSET before you run the script

It is a starting point, not a final schema: keys, indexes and constraints are yours to add.

Three Firebird details to plan for

1. Upper-case names. Firebird stores names in upper case (CUSTOMERS, CUST_NAME). SQL Server is not case sensitive by default, so you can keep them or rename them in the CREATE TABLE; dbSlice matches columns by name without case.

2. Character set. dbSlice connects with UTF-8. Older databases created with charset NONE or WIN1252 can stop with a "cannot transliterate" error on accented characters. Set the database's real charset in the connection string and run again.

3. Ids from generators. Firebird fills ids from generators (sequences). If the SQL Server column is an IDENTITY, keeping the original ids needs IDENTITY_INSERT, which needs ALTER permission on the table. In the Synchronize and Replicator tabs this is the option "Keep source IDENTITY (SQL Server, needs ALTER)": it is off by default and asks you to confirm before writing. With it off, dbSlice warns and stops before writing into an IDENTITY column. The other way: declare the column as a plain INT or BIGINT, copy, and add the IDENTITY or a SEQUENCE afterwards.

Common errors and what they mean

  • cannot transliterate character between character sets — charset NONE or WIN1252 in the Firebird database. Set the real charset in the connection string.
  • String or binary data would be truncated — a target column is shorter than the data, often declared by hand. Widen it.
  • Arithmetic overflow error converting numeric to data type numeric — a NUMERIC value does not fit the precision chosen. Widen the DECIMAL.

Step by step

  1. Connect to Firebird (host, port, database path or alias, user) and to SQL Server.
  2. Pick the source table or write a SELECT, and the target table.
  3. Choose the key column used to match rows.
  4. Choose the mode: Initial load the first time, then Upsert or Insert new.
  5. Check before writing: Record Diff compares keys on both sides.
  6. Run it, or save it as a job and schedule it from the CLI. The Replicator copies a list of tables in one run, parents before children.

Keep both in sync until cutover

The Firebird application usually stays in production while the new one is tested. Schedule an Upsert job every night; with a column that only grows (a timestamp or a generator-fed id), each run reads only rows above the last value it saw. Deletes in Firebird are not detected by incremental runs, so plan a full comparison or a reload before the switch.

FAQ

Does dbSlice convert PSQL procedures and triggers to T-SQL?

No. It moves data; rewrite the code separately.

Which Firebird versions?

Firebird 3, 4 and 5 are tested in our lab; 2.5 uses the same driver but is not in our test matrix. Types that only exist in Firebird 4 and 5 (DECFLOAT, INT128, TIME/TIMESTAMP WITH TIME ZONE) need a review in the suggested DDL, as in the table above.

Does it create the tables in SQL Server?

Not by default. It stops before writing and shows a CREATE TABLE for your DBA to review and run.

Can I try it before buying?

Yes. The free Microsoft Store version needs no license key; writing to a target database needs a Desktop or Server license.

Also works for

Firebird to PostgreSQL, MySQL, MariaDB, Oracle, SQLite or InterSystems IRIS, and SQL Server back into Firebird.

Try it on your own data: the free Microsoft Store version needs no license key.

Try free on the Microsoft Store ↗Buy dbSlice

Related guides

  • Oracle to PostgreSQL data migration, on Windows
  • Sync SQL Server to PostgreSQL
  • Sync Oracle to PostgreSQL
  • Firebird to PostgreSQL migration
  • SQL Server to MySQL migration
  • Masked staging copy
dbSlice®

Professional data synchronization, migration and reconciliation — for Windows and Linux (Docker).

A Thinwork product

Product

Product Pricing Guides Linux (Docker) Release notes Free version (Microsoft Store) Support FAQ Renew maintenance CLI examples

Legal

Terms of Use Privacy Policy Refund Policy EULA

Company

THINWORK TECNOLOGIA DA INFORMACAO - LTDA
CNPJ 09.166.605/0001-21
Since 2007

Av. Paulista, 1471, Conj. 511, Anexo CP 1722
Bela Vista, São Paulo - SP, 01311-927, Brazil

Sales

+55 (11) 5197-7969 [email protected]

Support hours: Mon–Fri, 9:00–17:00 (UTC−3)

github.com/thinwork Follow @dbsliceapp
© 2026 dbSlice®. All rights reserved. Windows x64 · GUI + CLI · Linux (Docker) · Web

dbSlice® and the dbSlice pizza mascot logo are registered trademarks of Thinwork Tecnologia da Informação Ltda. with the Brazilian National Institute of Industrial Property (INPI).

All other product names, logos and brands are the property of their respective owners and appear here only to identify the systems dbSlice works with. dbSlice is an independent product, not affiliated with, sponsored or endorsed by them. Learn more