Can you run data quality checks on an on-prem SQL Server without sending data to the cloud?

Yes. Use a self-hosted tool that runs its checks as read-only SQL inside SQL Server and keeps the results on a server in your own network. DataOps TestGen works this way: it installs next to the database, runs only SELECT statements, and stores computed results, not table rows, in its own database. DataKitchen hosts nothing and never receives your data.

Key points

  • DataOps TestGen is self-hosted: per its System Architecture and Security page, DataKitchen hosts no part of the application and has no access to your environment or data.
  • TestGen sends read-only SQL to SQL Server and never runs INSERT, UPDATE, DELETE, CREATE, ALTER, or DROP; it needs a SQL login with SELECT on the tables you test.
  • TestGen's own database stores computed results such as aggregates, statistics, and test outcomes, plus each column's most frequent values and minimum and maximum text values for display.
  • TestGen needs no inbound connections from outside your network; its only optional outbound calls are email, single sign-on, and anonymous usage analytics, which you can turn off.
  • Microsoft Purview's data quality product runs in Microsoft's cloud; for on-premises SQL Server its supported-sources table, updated April 2026, lists data quality scans but no data profiling.

For an on-prem SQL Server, the security question comes before any feature question: where does my data go? With a SaaS data quality tool, the answer usually involves the vendor’s cloud. It doesn’t have to.

What “no data leaves” requires

Three conditions, and a tool has to meet all of them:

ConditionWhat to check
Checks run where the data isThe tool sends SQL to SQL Server, rather than pulling rows out to compute on them
Results stay on your infrastructureThe tool’s own database runs on a server you control
No vendor-hosted componentNothing requires an account or connection to the vendor’s service

How DataOps TestGen meets them

Checks run in SQL Server. Data profiling, tests, and monitors are T-SQL queries that TestGen pushes into the database, per its Access Requirements. It never runs INSERT, UPDATE, DELETE, CREATE, ALTER, or DROP, so a DBA can grant a SQL login with SELECT only.

Results stay with you. TestGen’s application database is PostgreSQL on the TestGen server. It holds configuration, results, and schedules: aggregates, statistics, and test outcomes. For display, data profiling also keeps each column’s most frequent values and minimum and maximum text values. That’s the one place values from your tables land, and it’s on your server.

Nothing is hosted by DataKitchen. From System Architecture and Security, checked November 3, 2026: TestGen runs entirely within your infrastructure, DataKitchen hosts no part of it, and it needs no connections from outside your network.

ConnectionDirectionRequired?
SQL Server (read-only queries)Outbound from TestGenYes
TestGen’s own databaseInternalYes
Web UIInbound from your usersYes
REST API and MCP serverInboundOptional
SMTP for alertsOutbound to your mail serverOptional
Single sign-on (Enterprise)Outbound to your identity providerOptional
Anonymous usage analyticsOutboundOptional; turn off

Where to run it

On a Windows or Linux server, a VM, or a laptop on the same network as SQL Server. The Windows install uses dk-installer.exe. If TestGen runs in Docker on the SQL Server machine itself, use host.docker.internal as the host.

On a busy production server, start with one or two threads, as DataKitchen’s hotel reservation case study did on a 1.2 TB SQL Server database, or point TestGen at a readable replica.

The cloud alternative

Microsoft Purview Data Quality runs in Microsoft’s cloud. For on-premises SQL Server, its supported sources table, updated April 2026, lists data quality scans but no data profiling. See whether Purview works with on-prem SQL Server.

Open-source TestGen is free for one user, one connection, and one project. Start at the SQL Server install page, and see what data leaves your environment with an AI assistant if you plan to use TestGen’s MCP server.

Frequently asked questions

Short answers to the follow-up questions people ask next.

What does TestGen store about my SQL Server data?

Computed results: row counts, column statistics, test outcomes, and monitor history. For display in its data catalog, data profiling also keeps each column's most frequent values and minimum and maximum text values. Those live in TestGen's own PostgreSQL database on your server, not in the cloud. If a column holds sensitive values, keep TestGen's server inside the same security boundary as SQL Server.

Does TestGen call home?

Only for optional anonymous usage analytics, which cover installer and sign-in events, versions, and an anonymous token, never your data. Turn them off with the installer's --no-analytics option, or TG_ANALYTICS=no on Kubernetes. Email notifications and single sign-on are the other optional outbound connections, and both go to servers you configure.

Does the TestGen server need Docker?

Not necessarily. TestGen's installer offers two modes. Docker Compose mode, which DataKitchen recommends for persistent use, needs Docker 27 or later. Pip mode needs no prerequisites: the installer sets up its own Python environment and a PostgreSQL database on the file system, and the docs describe it as suited for evaluation.

Which login does TestGen need on SQL Server?

A SQL login with SELECT on the tables you want tested. TestGen also reads information_schema.columns, sys.objects, and sys.partitions, which a database user can read by default. Windows authentication isn't supported for SQL Server, and no write permission, VIEW DEFINITION, or db_owner is needed.

Try it on your own data

DataOps TestGen is free and open source. Profile a table and generate its tests this afternoon.