Skip to content
adapters.io

SQL Server to Snowflake migration and replication, one connector

The SQL Server to Snowflake connector from Adapters replicates SQL Server tables into Snowflake on an incremental schedule, converting T-SQL data types to their Snowflake equivalents and merging on the primary key so reporting reads the warehouse instead of your transactional database. Field mapping is no-code, so try it against sample records in the live demo.

The live demo needs no card, and Starter is $49 a month.

Field mapping auto-plugged · tap a port to rewire

5 sample records ready

What running SQL Server to Snowflake by hand costs you

  • Analysts running month-end reports against production SQL Server put read pressure on the same instance that takes orders.
  • Hand-written BCP exports to CSV and COPY INTO scripts break the first time a NVARCHAR column contains an embedded delimiter.
  • SQL Server folds unquoted identifiers to the case you typed them in while Snowflake folds them to uppercase, so a lift-and-shift quietly breaks every downstream query that quoted a column.

The field mapping, out of the box

These cables are pre-wired when you pick the pair. Rewire any of them, or add your own, in the same visual data mapping tool you use for every adapter.

Input / SQLSERVER

dbo.Orders.OrderID
ORDERS.ID
dbo.Customers.Email
CUSTOMERS.EMAIL
dbo.Customers.FullName
CUSTOMERS.NAME
dbo.Orders.TotalAmount
ORDERS.TOTAL_USD
dbo.Orders.ModifiedDate
ORDERS.CREATED_AT_UTC
dbo.Orders.Status
ORDERS.STATUS

Transforms included

Incremental runs use a SQL Server ModifiedDate watermark, or the CDC change tables when you need deletes, so only changed rows load; MONEY and SMALLMONEY become NUMBER at full scale instead of a float that rounds cents, DECIMAL and NUMERIC keep their declared precision inside the Snowflake NUMBER limit of 38 digits, DATETIME and DATETIME2 land as TIMESTAMP_NTZ while DATETIMEOFFSET keeps its offset in TIMESTAMP_TZ, BIT becomes BOOLEAN, UNIQUEIDENTIFIER and XML land as VARCHAR, VARBINARY becomes BINARY, and every load MERGEs on the primary key so a replayed batch never duplicates a row.

SQL Server to Snowflake in depth

Two things decide whether this route works: whether SQL Server change data capture is configured correctly enough that your transaction log can truncate, and whether your money columns survive Snowflake default typing. Read from Microsoft and Snowflake documentation, current as of 30 August 2026.

Snowflake NUMBER defaults to zero scale and eats the cents

This is the quiet one. Snowflake NUMBER defaults to (38,0), meaning thirty-eight digits of precision and no decimal places. A money column landed on the default type keeps every dollar and silently discards the cents, on every row, with no error and no warning. Declare NUMBER(18,2) explicitly for currency. Row counts will match perfectly afterwards and the totals will not, which is why this is usually found weeks later during a reconciliation.

Identifier case folds in opposite directions

Snowflake folds unquoted identifiers to UPPERCASE. PostgreSQL and Redshift fold to lowercase. SQL Server preserves the case you typed. A pipeline that quotes identifiers in one place and not another produces two tables that look identical in a listing and do not join, and the error message is a missing column rather than anything about case. Choose one convention, apply it everywhere, and quote consistently or not at all.

CDC will hold your transaction log open

SQL Server change data capture reads the log through sp_replcmds and requires SQL Server Agent to be running. The consequence teams meet at the worst moment: the log truncation point does not advance until the capture process has gathered the changes. If the Agent is stopped or the capture job is failing, the log grows without bound until the volume fills, and the database stops accepting writes. Monitor capture job health as a production alert, not as a data-pipeline nicety.

Capture throughput and the retention window

The capture process handles a maximum of 1,000 transactions per cycle with a 5 second wait between cycles by default, so a large batch job produces a backlog that drains over minutes. Cleanup runs daily at 2 AM and retains 4,320 minutes, which is three days. Any consumer offline longer than that loses changes permanently and needs a fresh snapshot. Alert on consumer lag against that window rather than discovering the gap after a long weekend.

Read __$operation correctly or updates land backwards

The change tables encode the operation in __$operation: 1 is delete, 2 is insert, 3 is the before image of an update, and 4 is the after image. An update therefore produces two rows, and a loader that treats every row as current will apply the before image last on any run where ordering is not guaranteed, quietly reverting the change. Filter to operations 1, 2 and 4 for a current-state target, and keep 3 only if you are deliberately building history.

File sizing decides your load cost

Snowflake recommends staged files of 100 to 250 MB compressed, and explicitly does not recommend files of 100 GB or more. The default COPY timeout is 24 hours, which sounds generous until a single oversized file exhausts it and the whole load rolls back. Snowpipe lands data within about a minute for continuous ingestion. Splitting to the recommended range costs nothing and turns one long serial load into parallel work.

Type mapping beyond money

SQL Server MONEY should become an explicit decimal type, never a floating-point one. DATETIME2(p) carries no offset, so it maps to a plain timestamp: DATETIMEOFFSET is the only SQL Server type that has earned a timezone-aware target, and promoting the others invents an offset that was never in the source. Also watch the Snowflake size ceilings: VARIANT, VARCHAR and ARRAY cap at 128 MB, BINARY at 64 MB, and VARCHAR defaults to 16 MB.

Where this sits in a wider stack

If the move is a one-time cutover rather than an ongoing feed, the tooling and the pricing model are different and are compared on data migration tools. For the Snowflake side in general, loading rules and warehouse sizing are on Snowflake ETL tools, and the mechanics of log-based capture across engines are on change data capture tools.

How it goes live

Three steps, minutes end to end, covered by flat data integration pricing from $49 a month.

STEP 01

Pick the pair

Connect SQL Server and Snowflake with scoped credentials. About a minute each.

STEP 02

Confirm the mapping

The cables above are pre-wired. Adjust any field, preview the transform on sample records, done.

STEP 03

Schedule the sync

Hourly down to every minute, with retries, alerting, and a full log on every run.

Prefer to understand the moving parts first? Our long-form guide to the SQL Server to Snowflake migration guide covers the field-by-field detail, the failure cases, and what changes at volume.

Try it in the live demo Preloads SQLSERVER → SNOWFLAKE with sample records

SQL Server to Snowflake sync: common questions

How do I migrate SQL Server to Snowflake?

Convert the schema to Snowflake types, backfill each table once from a replica, keep the two in step with incremental loads, then move the reports and retire the old feed. Each pass is reversible on its own, so you never need a big-bang weekend cutover.

What is the SQL Server to Snowflake data type mapping?

Integers become NUMBER(38,0), NVARCHAR becomes VARCHAR, and BIT becomes BOOLEAN. The three to decide deliberately are MONEY, which must become NUMBER(19,4) and never FLOAT, DATETIME2, which belongs in TIMESTAMP_NTZ, and DATETIMEOFFSET, the only type that should become TIMESTAMP_TZ.

How do I replicate SQL Server to Snowflake in real time?

Enable SQL Server change data capture, which reads the transaction log and writes inserts, updates, and deletes into change tables. CDC runs as two SQL Server Agent jobs, so the Agent service has to be running. It is the only method that also gives you deletes.

Can Snowflake replace SQL Server?

For analytics and reporting, yes. For transactional workloads, no. Snowflake has no equivalent of the single-row seeks, enforced foreign keys, and low-latency writes an application needs. Most teams run both: SQL Server keeps the application, Snowflake owns the reporting.

Why do my queries break after moving to Snowflake?

Usually identifier case. Snowflake folds unquoted identifiers to uppercase, so a column created as OrderID is physically ORDERID and a query selecting the quoted "OrderID" fails. Create everything unquoted and reference it unquoted rather than quoting mixed case forever.

How does the SQL Server to Snowflake sync work?

The SQL Server to Snowflake connector from Adapters replicates SQL Server tables into Snowflake on an incremental schedule, converting T-SQL data types to their Snowflake equivalents and merging on the primary key so reporting reads the warehouse instead of your transactional database. Field mapping is no-code, so try it against sample records in the live demo.

Is there a prebuilt SQL Server connector for Snowflake?

Yes. This SQL Server to Snowflake connector ships prebuilt: the field mapping is wired the moment you pick the pair, transforms are included, and you can try it against sample records in the live demo. No code or engineering sprint required.

How much does the SQL Server Snowflake integration cost?

Pricing is flat and monthly: Starter at $49, Growth at $149, Scale at $399. Every plan includes this pair, visual field mapping, and per-record logs. There are no per-task or per-row fees, so the bill stays the same as volume grows.

How often can Adapters sync SQL Server to Snowflake?

Hourly on Starter, every 5 minutes on Growth, and down to every minute on Scale. Failed records retry automatically with backoff, and alerting plus a full per-record log come standard on every run.

Do I need to write code to connect SQL Server and Snowflake?

No. Fields are auto-mapped the moment you pick the pair, and you can rewire any mapping visually before the first sync. Incremental runs use a SQL Server ModifiedDate watermark, or the CDC change tables when you need deletes, so only changed rows load; MONEY and SMALLMONEY become NUMBER at full scale instead of a float that rounds cents, DECIMAL and NUMERIC keep their declared precision inside the Snowflake NUMBER limit of 38 digits, DATETIME and DATETIME2 land as TIMESTAMP_NTZ while DATETIMEOFFSET keeps its offset in TIMESTAMP_TZ, BIT becomes BOOLEAN, UNIQUEIDENTIFIER and XML land as VARCHAR, VARBINARY becomes BINARY, and every load MERGEs on the primary key so a replayed batch never duplicates a row.

More pairs from the API connector library

stripe quickbooks integration shopify netsuite integration salesforce hubspot integration airtable google sheets sync postgres to snowflake sync shopify quickbooks integration salesforce netsuite integration paypal quickbooks integration square quickbooks integration stripe netsuite integration hubspot quickbooks integration quickbooks to xero migration shopify xero integration salesforce to snowflake integration square netsuite integration hubspot xero integration salesforce to bigquery integration postgres to bigquery netsuite to snowflake integration quickbooks to bigquery integration stripe to snowflake integration shopify to snowflake integration quickbooks to snowflake integration hubspot to snowflake integration netsuite to bigquery integration stripe to bigquery integration shopify to bigquery integration paypal to snowflake integration square to snowflake integration square to bigquery integration netsuite to postgres integration salesforce to postgres integration xero to snowflake integration hubspot to bigquery integration xero to bigquery integration paypal to bigquery integration stripe to postgres integration snowflake to bigquery migration shopify to postgres integration hubspot to postgres integration bigquery to snowflake migration quickbooks to postgres integration xero to postgres integration square to postgres integration paypal to postgres integration snowflake to postgres mysql to postgres migration mysql to snowflake redshift to snowflake migration mysql to bigquery sql server to postgresql migration

Browse the full api connector library, or request a pair you do not see.

SQL Server and Snowflake, finally in agreement

Map the pair once and let it sync on schedule. Flat price from $49 a month, no per-task fees.

The live demo needs no card, and Starter is $49 a month.

Get started