
SQL Server Table Reconciliation
OfficialFreeEfficiently compare SQL Server tables across instances.
Free · Opens the source repo
What SQL Server Table Reconciliation does
SQL Server Table Reconciliation is a Python-based tool designed for developers and data engineers who need to compare identical tables across two SQL Server instances. This skill utilizes the mssql-python driver along with Apache Arrow for fast columnar data transfer, making it suitable for tasks such as data migration validation, ETL verification, and schema drift detection. By automating the comparison process, it helps ensure data consistency between production and staging environments.
The reconciliation process begins by collecting connection details for both the source and target SQL Server instances. Users specify the primary key or allow the tool to auto-detect it from the metadata. The skill then detects schema differences, extracts data using Arrow for efficient transfer, and compares both rows and columns. A detailed reconciliation report is generated, highlighting any discrepancies such as missing rows or column mismatches, which is crucial for maintaining data integrity.
This tool is particularly beneficial for teams involved in data management and migration projects, as it streamlines the process of validating data across environments. It supports various output formats, including console, CSV, and JSON, allowing users to choose how they want to view the results. The skill also includes optimization strategies for handling large tables, ensuring performance remains efficient even with extensive datasets.
Overall, SQL Server Table Reconciliation is a valuable addition for anyone needing to ensure data accuracy and consistency across SQL Server instances, making it easier to detect and resolve issues before they impact production systems.
When to use it
Use this tool when you need to validate data between production and staging environments or during data migrations.
When not to use it
This skill may not be suitable for non-SQL Server databases or for scenarios where schema comparison is not required.
What you can build with it
Data Migration Validation
Verify that data has been accurately migrated from a production SQL Server instance to a staging instance.
ETL Process Verification
Ensure that the ETL processes have not introduced discrepancies between source and target tables.
Schema Drift Detection
Identify any schema changes that may have occurred between two SQL Server instances over time.
How to install SQL Server Table Reconciliation
View source1. Install with the skills CLI
npx skills add github/awesome-copilot/sql-server-table-reconciliation --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by githubSQL Server Table Reconciliation
Compare identical tables across two SQL Server instances using Python with mssql-python driver and Apache Arrow. Detect missing rows, column mismatches, schema drift, and produce a reconciliation report.
Workflow
- Collect connection details for source and target
- Identify primary key / composite key
- Detect schema differences
- Extract data via Arrow for efficient columnar transfer
- Compare rows and columns
- Generate reconciliation report
Collect Inputs
| Parameter | Required | Description |
|---|---|---|
| Source server | Yes | Source SQL Server (e.g. prod-server.database.windows.net) |
| Source database | Yes | Source database name |
| Target server | Yes | Target SQL Server (e.g. staging-server.database.windows.net) |
| Target database | Yes | Target database name |
| Tables | Yes | Comma-separated schema.table names, or schema.* wildcard (e.g. dbo.Orders,dbo.Items or dbo.*) |
| Auth mode | Yes | sql (user/password) or entra (Azure AD/token) |
| Primary key | Auto-detect | Column(s) forming the row identity. Auto-detect from metadata if not provided. |
| Columns to compare | All | Subset of columns, or all non-PK columns |
| Chunk size | 100000 | Rows per batch for large tables |
| Output format | console | console, csv, parquet, or json |
Bundled Script
The reconciliation logic is provided as a standalone script at scripts/reconcile.py. Invoke it with the appropriate arguments based on user inputs:
python scripts/reconcile.py \
--source-server <source_server> \
--source-database <source_database> \
--target-server <target_server> \
--target-database <target_database> \
--tables "<table_spec>" \
--auth <sql|entra> \
--chunk-size <chunk_size> \
--output <console|csv|json>
Optional arguments
| Argument | Description |
|---|---|
--primary-key | Comma-separated PK column(s). Omit to auto-detect. |
--columns | Comma-separated columns to compare. Omit to compare all non-PK columns. |
Example invocations
Single table with SQL auth:
python scripts/reconcile.py \
--source-server prod-server.database.windows.net \
--source-database ProdDB \
--target-server staging-server.database.windows.net \
--target-database StagingDB \
--tables "dbo.Orders" \
--auth sql \
--output console
Wildcard with Entra auth and CSV output:
python scripts/reconcile.py \
--source-server prod-server.database.windows.net \
--source-database ProdDB \
--target-server staging-server.database.windows.net \
--target-database StagingDB \
--tables "dbo.*" \
--auth entra \
--output csv
Prerequisites
Install required packages before running:
pip install mssql-python pyarrow pandas
Comparison Rules
- Normalize types before comparing: cast decimals to same precision, trim strings, normalize datetime to UTC
- NULL handling:
NULL == NULLis considered a match (both sides missing = no diff) - Ignore row order: always compare by PK join, never positional
- Large tables: chunk extraction with
OFFSET/FETCHorROW_NUMBER()partitioning
Hash-Based Optimization (for large tables)
When table has >1M rows, generate a hash pre-check:
SELECT {pk_cols},
HASHBYTES('SHA2_256', CONCAT_WS('|', col1, col2, ...)) AS row_hash
FROM {table}
Compare hashes first; only fetch full rows for mismatched hashes. This reduces data transfer significantly.
Report Format
Reconciling dbo.EMPLOYEES...
Reconciling dbo.DEPARTMENTS...
Reconciling dbo.JOBS...
--- dbo.EMPLOYEES ---
Source: 107 Target: 107
Missing: 0 Extra: 0 Mismatches: 0
Result: ✓ IDENTICAL
--- dbo.DEPARTMENTS ---
Source: 27 Target: 27
Missing: 0 Extra: 0 Mismatches: 3
Result: ✗ DIFFERENCES FOUND
--- dbo.JOBS ---
Source: 19 Target: 19
Missing: 0 Extra: 0 Mismatches: 0
Result: ✓ IDENTICAL
=== Summary: 2 passed, 1 failed, 0 skipped / 3 tables ===
When a single table is provided, include full detail (schema drift, sample rows, mismatches). When multiple tables, use the compact per-table format above with full detail only for tables with FAIL status.
Performance Considerations
| Scenario | Strategy |
|---|---|
| < 100K rows | Single Arrow fetch, in-memory pandas compare |
| 100K–1M rows | Chunked extraction (100K batches), streaming comparison |
| > 1M rows | Hash pre-check → only fetch mismatched rows |
| Wide tables (100+ cols) | Compare PK + hash first, drill into specific columns on mismatch |
| Network-constrained | Use Arrow columnar format (10-50x smaller than row-by-row) |
Constraints
- Always use
mssql-pythondriver (not pyodbc, pymssql) - Always use Apache Arrow via cursor (
cursor.arrow()) for data extraction - Connection MUST use connection string format, not keyword arguments (kwargs like
encrypt=Truethrow errors) - Never compare without identifying PK first — ask user if auto-detect fails
- Handle connection failures gracefully with retry logic
- Never hardcode credentials in generated scripts — use
os.environ/getpass(env vars:MSSQL_USER,MSSQL_PASSWORD) - Do not print credentials in output or logs
- Use parameterized queries (
?placeholders) for metadata lookups — never f-string interpolate user input into SQL
Frequently asked questions about SQL Server Table Reconciliation
Similar skills
Single-Cell RNA-seq QC
Automate quality control for single-cell RNA-seq data.
Instrument Data to Allotrope Converter
Standardize lab data for seamless integration.
Data Cleaning and Variable Screening
Streamline credit risk data preprocessing for modeling.
Arize Dataset
Manage and query Arize datasets efficiently.
Spreadsheet Management
Efficiently create, edit, and analyze spreadsheet files.
Ingest into Data Lake
Efficiently import data into AWS data lakes from various sources.
