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.

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 TABLEtranslated 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
| Firebird | Suggested in SQL Server | Review before running |
|---|---|---|
SMALLINT, INTEGER, BIGINT | SMALLINT, INT, BIGINT | — |
NUMERIC(p,s), DECIMAL(p,s) | DECIMAL(p,s) | — |
FLOAT, DOUBLE PRECISION | FLOAT | — |
DATE, TIME | DATE, TIME | — |
TIMESTAMP | DATETIME2 | — |
CHAR(n), VARCHAR(n) | NVARCHAR(n), or NVARCHAR(MAX) above 4,000 | CHAR padding is not kept |
BOOLEAN | BIT | — |
BLOB SUB_TYPE 1 (text) | NVARCHAR(MAX) | — |
BLOB (binary) | VARBINARY(MAX) | — |
Firebird 4 and 5: DECFLOAT, INT128, TIME/TIMESTAMP WITH TIME ZONE | NVARCHAR(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— charsetNONEorWIN1252in 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— aNUMERICvalue does not fit the precision chosen. Widen theDECIMAL.
Step by step
- Connect to Firebird (host, port, database path or alias, user) and to SQL Server.
- Pick the source table or write a SELECT, and the target table.
- Choose the key column used to match rows.
- Choose the mode: Initial load the first time, then Upsert or Insert new.
- Check before writing: Record Diff compares keys on both sides.
- 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.