---
title: "SYSPRO SQL Table Map for Data Migration: A Technical Guide"
slug: syspro-sql-table-map-for-migration
date: 2026-10-26
author: Raajshekhar Rajan
categories: [SYSPRO, ERP, Migration Guide]
excerpt: "A map of SYSPRO SQL tables for data migration, with every table name checked against SYSPRO's own documentation. Covers core modules, custom form plus tables, foreign keys and extraction routes."
tldr: "SYSPRO 8 stores data in Microsoft SQL Server: one system-wide database plus one database per company, with module-prefixed table names. This guide maps the SYSPRO SQL tables that SYSPRO documents by name, the custom form plus tables, and the unenforced foreign keys you need to scope a migration."
canonical: https://clonepartner.com/blog/syspro-sql-table-map-for-migration
---

# SYSPRO SQL Table Map for Data Migration: A Technical Guide


> [!NOTE]
> **TL;DR** — SYSPRO 8 stores company data in Microsoft SQL Server using module-prefixed tables such as `ArCustomer`, `InvMaster` and `SorMaster`. SYSPRO says each company database "contains approximately 1000 tables". A migration needs a small core of them. For an on-premise SYSPRO, a one-off, read-only SQL extract is the most complete route. In Syspro Cloud ERP, the OData service is the only route.

**SYSPRO 8 stores all its data in Microsoft SQL Server**, in one system-wide database and one database per SYSPRO company. SYSPRO's own database guide says "each SYSPRO 8 company database contains approximately 1000 tables" ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)). Only a small set of those SYSPRO SQL tables hold the master and transactional data a migration moves. This guide maps those tables by module. Every table name below appears in SYSPRO's own documentation, and each row links to the page where it does. The guide also covers the edge cases that break migrations when they are missed: custom form "plus" tables, exchange rates, lot and serial tracking, and unenforced foreign keys.

The deadline is close. SYSPRO is ending its Initial License Fee and Annual License Fee model and moving to a named-user subscription. Existing licences expire on **31 October 2026** for customers outside the US and **31 December 2026** for customers in the US. After that date "you will no longer be able to access Syspro" unless you sign a new subscription agreement ([syspro.com](https://www.syspro.com/formal-notice-change-to-syspro-licensing/)).

For every extraction method, see [How to Export Data from SYSPRO: Methods, API Limits & Portability](https://clonepartner.com/blog/blog/how-to-export-data-from-syspro-methods-api-limits-portability). For a side-by-side view of the two main routes, see [SYSPRO e.net Business Objects vs Direct SQL for Data Extraction](https://clonepartner.com/blog/blog/syspro-enet-business-objects-or-direct-sql-extraction).

## How Is SYSPRO's Database Structured?

**SYSPRO uses one system-wide database and one database per SYSPRO company.** A site with three companies has four databases. SYSPRO's guide says all of them "must be located on a single instance of Microsoft SQL Server" ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)).

The **system-wide database** "contains over 100 tables depending on the features installed". It holds operators, licence information, security settings and audit data. Data dictionary tables start with `Dds`, Report Writer tables with `Rep`, Espresso mobile tables with `Esp` and Avanti tables with `Avt`. The `SysproAdmin` table holds the "Company / Database / Collation cross-reference" ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)). Start there to find every company database on the site.

The **company database** holds master and transactional data for that company. Table names start with a module mnemonic: `Ar` for Accounts Receivable, `Ap` for Accounts Payable, `Inv` for Inventory, `Sor` for Sales Orders, `Por` for Purchase Orders, `Bom` for Bill of Materials, `Wip` for Work in Progress and `Gen` for General Ledger. SYSPRO table names have a maximum of 18 characters ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)).

## Which SYSPRO SQL Tables Do You Need for a Migration?

The tables below are the ones SYSPRO names in its documentation. Your company database has many more. Use the discovery queries later in this guide to find the rest of your scope.

### Accounts Receivable (Customers)

| Table | What it holds | Source |
|---|---|---|
| `ArCustomer` | Customer master. SYSPRO's example columns include `Customer`, `Name`, `Telephone`, `CreditLimit`, `Salesperson` and `Branch` | [help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf) |
| `ArCustomerGroup` | Customer groups | [help.syspro.com](https://help.syspro.com/syspro-8-2021-r2/g_programs/ars/arsbcg/arsbcg.htm) |
| `ArInvoice` | Customer invoices | [help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf) |
| `[ArCustomer+]` | Custom form fields on customers (user-defined columns) | [help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf) |

**`ArCustomer`** is the anchor of the AR module. SYSPRO's guide uses it as its foreign key example: `ArInvoice` stores the customer in its `Customer` column, and the key `Syspro_FK_ArInvoice_ArCustomer` describes that link ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)). Extract `ArCustomerGroup` to rebuild your customer classification in the new system. Pull `ArInvoice` if your scope includes historical sales invoices or open AR balances.

### Accounts Payable (Suppliers)

| Table | What it holds | Source |
|---|---|---|
| `ApSupplier` | Supplier master | [help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf) |
| `ApInvoice` | Supplier invoices | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |
| `ApBank` | Banks | [help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf) |
| `[ApSupplier+]` | Custom form fields on suppliers (user-defined columns) | [help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf) |

Open AP comes from `ApInvoice`. Reconcile it against your AP control account so liabilities land correctly in the target ERP.

### Inventory

| Table | What it holds | Source |
|---|---|---|
| `InvMaster` | Inventory master (stock codes) | [help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf) |
| `InvWarehouse` | Inventory per warehouse | [help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf) |
| `InvMovements` | Inventory movements | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |
| `InvSerialHead` | Serial numbers | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |
| `LotDetail` | Lot detail for lot-traceable items | [help.syspro.com](https://help.syspro.com/syspro-8-2024/g_programs/imp/impbla/impbla.htm) |

Inventory is often the most complex domain to migrate. **`InvMaster`** defines each stock code. **`InvWarehouse`** holds the per-warehouse records for those stock codes. If your target system has a different warehouse or location model, this pair is where the structural translation happens.

Few teams load full `InvMovements` history into a new ERP. More often it goes to an archive or a data warehouse. If you track serialised stock, map `InvSerialHead` to the target's serial entities. Lot history needs a check first: SYSPRO's lot Purge and Archive program deletes and archives lot transactions, so some history may already sit outside the live tables ([help.syspro.com](https://help.syspro.com/syspro-8-2024/g_programs/lot/lotp01/lotp01.htm)).

### Sales Orders

| Table | What it holds | Source |
|---|---|---|
| `SorMaster` | Sales order headers | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |
| `SorDetail` | Sales order lines | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |

`SorMaster` and `SorDetail` follow a header and line pattern. Use the `Syspro_FK_` keys (query below) to confirm how they join to each other, to customers and to stock codes. Then produce a denormalised extract your target system can load.

> [!WARNING]
> Archived sales orders are not in `SorMaster` or `SorDetail`. SYSPRO's archiving copies purged sales orders to XML files, per SYSPRO 7 Update 1 help ([help.syspro.com](https://help.syspro.com/syspro-7-update-1/ovr-archiving.htm)). The `SORQRY` business object cannot query archived sales orders either ([help.syspro.com](https://help.syspro.com/business-object-library/G_Objects/sor/sorqry/sorqry.htm)). If archiving has been run, collect the archive files as a separate source.

### Purchase Orders

| Table | What it holds | Source |
|---|---|---|
| `PorMasterHdr` | Purchase order headers | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |
| `PorMasterDetail` | Purchase order lines | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |

This is the same header and line pattern as sales orders. Confirm the joins to suppliers and stock codes from the `Syspro_FK_` keys.

### Bill of Materials and Manufacturing

| Table | What it holds | Source |
|---|---|---|
| `BomOperations` | Bill of materials operations (routing steps) | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |
| `BomWorkCentre` | Work centres | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |
| `WipMaster` | Work in progress jobs | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |
| `WipJobAllMat` | Materials allocated to a job | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |
| `WipJobAllLab` | Labour (operations) allocated to a job | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |

Manufacturing data is where SYSPRO migrations get structurally complex. BOM and WIP tables reference inventory, work centres and routings in ways that rarely map one-to-one to the target system. Epicor Kinetic, SAP Business One and Dynamics 365 Business Central each model BOMs, routings and job costing differently. To migrate open WIP, extract the material and labour allocations and translate them into the target's production order format. The [BOMs and routings guide](https://clonepartner.com/blog/blog/migrating-syspro-boms-and-routings) works through this translation. For the pair-specific mapping, see [SYSPRO to Epicor Kinetic](https://clonepartner.com/blog/migrate/syspro-to-epicor-kinetic) and [SYSPRO to Microsoft Dynamics 365 Business Central](https://clonepartner.com/blog/migrate/syspro-to-microsoft-dynamics-365-business-central).

### General Ledger

| Table | What it holds | Source |
|---|---|---|
| `GenMaster` | General ledger accounts | [help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/2022-release/topics/syspro-8-business-activity-queries-reference-guide.pdf) |
| `GenTransaction` | General ledger transactions | [help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm) |

**`GenMaster`** defines the chart of accounts. **`GenTransaction`** holds the posted transactions. Most teams load opening balances into the new ERP and keep full `GenTransaction` history in an archive or data warehouse.

### Currencies

| Table | What it holds | Source |
|---|---|---|
| `TblCurrency` | Currencies and exchange rates | [help.syspro.com](https://help.syspro.com/syspro-8-2024/topics/dated-exchange-rates/dated-exchange-rates-ovr.htm) |
| `TblCurrDatedRates` | Dated exchange rates | [help.syspro.com](https://help.syspro.com/syspro-8-2024/topics/dated-exchange-rates/dated-exchange-rates-ovr.htm) |

If you run SYSPRO in more than one currency, put both tables in scope. To keep the exact rate used on historical foreign currency transactions, you need `TblCurrDatedRates`. Without these tables, opening balances in other currencies will not reconcile.

## What Are SYSPRO's Custom Form "Plus" Tables?

**SYSPRO stores custom form data in a separate table per form type, named after the primary table with a `+` suffix.** Custom fields on customers live in `ArCustomer+`, and custom fields on suppliers live in `ApSupplier+` ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)). SYSPRO advises surrounding these names with square brackets, for example `[ArCustomer+]`, so SQL does not treat the `+` as an addition symbol.

SYSPRO's guide says the column names in these tables "are described by the end-user" and change as the custom form designer adds, changes or deletes fields ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)). Your migration script must discover their structure at runtime:

```sql
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE '%+'
ORDER BY TABLE_NAME, ORDINAL_POSITION;
```

Then find each plus table's key columns before you join it to its primary table:

```sql
SELECT TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME LIKE '%+'
ORDER BY TABLE_NAME, ORDINAL_POSITION;

-- Pull one plus table whole, then join on the key columns found above
SELECT * FROM [ArCustomer+];
```

**Older deployments:** before SYSPRO 7, custom form data lived in a single table, `AdmFormData` ([help.syspro.com](https://help.syspro.com/syspro-7-update-1/ovr-custom-forms.htm)). If you extract from an older version, your mapping must pivot data out of that one table.

Plus tables are a common source of data loss in SYSPRO migrations. Teams that scope only the standard tables miss every custom field the business added over the years. Run the discovery query early. The [custom form fields guide](https://clonepartner.com/blog/blog/syspro-custom-form-fields-migrating-plus-tables) covers mapping them to the target system.

## How Do SYSPRO's Foreign Keys Work?

**SYSPRO 8 creates every foreign key "by specifying 'WITH NOCHECK'"**, so SQL Server does not verify the rows involved. SYSPRO says the keys exist "purely to describe the relationship between tables", and its business logic enforces data integrity. Foreign keys are named `Syspro_FK_` followed by the source table, an underscore and the target table, for example `Syspro_FK_ArInvoice_ArCustomer` ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)).

This matters for migration planning in two ways:

1. **The foreign keys map your join paths.** Query them to build a dependency graph of the tables you extract. It shows which tables reference which, and the order to load them into the target system.
2. **`WITH NOCHECK` means orphaned rows can exist.** Do not assume every `ArInvoice` row has a matching `ArCustomer` row. Use `LEFT JOIN` rather than `INNER JOIN` in your extraction queries, and flag orphans before the load.

To list the SYSPRO foreign keys in a company database:

```sql
SELECT 
    fk.name AS fk_name,
    tp.name AS parent_table,
    cp.name AS parent_column,
    tr.name AS referenced_table,
    cr.name AS referenced_column
FROM sys.foreign_keys fk
INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
INNER JOIN sys.tables tp ON fkc.parent_object_id = tp.object_id
INNER JOIN sys.columns cp ON fkc.parent_object_id = cp.object_id AND fkc.parent_column_id = cp.column_id
INNER JOIN sys.tables tr ON fkc.referenced_object_id = tr.object_id
INNER JOIN sys.columns cr ON fkc.referenced_object_id = cr.object_id AND fkc.referenced_column_id = cr.column_id
WHERE fk.name LIKE 'Syspro_FK_%'
ORDER BY tp.name, tr.name;
```

## How Do You Extract Data from SYSPRO for Migration?

We recommend three routes, in this order. Direct SQL comes first where you can use it. OData comes next where you cannot. e.net business objects suit integration, not bulk extraction.

### A one-off, read-only SQL extract

SYSPRO's best-practice guide warns: "Connecting to the SYSPRO databases directly using SQL drivers is not advised" ([help.syspro.com](https://help.syspro.com/syspro-8-2023/resources/pdfs/2023-release/technical/syspro-8-best-practices-for-connecting-to-syspro.pdf)). That warning is about live integrations. A migration extract is different: it runs once and writes nothing back. Use a read-only login, ideally against a restored copy of the company database, so the live system carries no load.

On that basis, SQL is the most complete route for an on-premise SYSPRO. It reaches every table, including the plus tables, and you control the query, the joins and the output format. For hundreds of thousands of inventory movements or historical invoices, it is the practical route.

### Syspro OData Service

The OData service is read-only. It "lets you connect securely to SYSPRO data without direct SQL access" ([help.syspro.com](https://help.syspro.com/syspro-8-2024/topics/syspro-services/syspro-odata-service/syspro-odata-service.htm)). SYSPRO says it "is the only mechanism available when applications need access to SYSPRO data in the Syspro Cloud ERP environment" ([help.syspro.com](https://help.syspro.com/syspro-8-2025/topics/insights-and-reporting/syspro-odata/syspro-odata.htm)). SYSPRO limits it to 5,000 rows "under the Microsoft best practice guidelines for performance and fair use", and paging uses `$top` and `$skip` ([help.syspro.com](https://help.syspro.com/syspro-8-2021-r2/topics/insights-and-reporting/syspro-odata/syspro-odata.htm)). Large tables therefore need many paged calls.

### Business Activity Queries (BAQs)

"SYSPRO Business Activity Queries are SQL views that are created in the relevant company databases", and "any SQL user with db_datareader permissions can retrieve data using the views" ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/2022-release/topics/syspro-8-business-activity-queries-reference-guide.pdf)). BAQs give you pre-joined datasets. They are views over the same tables, so they reach nothing that SQL cannot. The Business Activity Query Export program moves query definitions between environments. It does not export data.

### e.net Business Objects

e.net query objects such as `ARSQRY`, `INVQRY` and `SORQRY` return XML for one record or a filtered set per call. They suit integration, not bulk extraction. Calling a business object for every historical sales order is far slower than one SQL query and adds load to the application server. For a detailed comparison, see [SYSPRO e.net Business Objects vs Direct SQL for Data Extraction](https://clonepartner.com/blog/blog/syspro-enet-business-objects-or-direct-sql-extraction).

## Common Mapping Pitfalls in SYSPRO Migrations

These patterns break SYSPRO migration projects:

- **Missing plus tables.** Custom form data is invisible if you scope only the standard tables. Run the `INFORMATION_SCHEMA` discovery query before you finalise the mapping.
- **Archived sales orders.** Archived orders sit in XML archive files, not in `SorMaster` and `SorDetail`. Find out whether archiving has been run and where the files are.
- **Shared GL across companies.** With Shared GL, SYSPRO stores the General Ledger data of several companies in one company's database, with a company id in each row ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)). Your `GenMaster` and `GenTransaction` extract may need to come from another company's database.
- **Exchange rate gaps.** Check the date coverage of `TblCurrDatedRates` before you load. Gaps give wrong rates in the target system's revaluation.
- **`WITH NOCHECK` orphans.** Run referential integrity checks on the extract before you load it into a target that enforces constraints.

For more data-layer failure patterns, see [Why ERP Migrations Fail at the Data Layer: 9 Core Patterns](https://clonepartner.com/blog/blog/why-erp-migrations-fail-at-the-data-layer-9-core-patterns).

## How Does the 2026 Licence Change Affect Migration Planning?

SYSPRO is ending its Initial and Annual Licence Fee model. Existing licences expire on **31 October 2026** for customers outside the US and **31 December 2026** for customers in the US. After the expiry date, access to SYSPRO stops unless you sign a new subscription agreement ([syspro.com](https://www.syspro.com/formal-notice-change-to-syspro-licensing/)).

The same notice says: "On cessation of your current licence, you have the right to export your data." SYSPRO "will provide a straightforward process for this on request", and asks customers to raise it with their account manager ahead of the expiry date ([syspro.com](https://www.syspro.com/formal-notice-change-to-syspro-licensing/)). The notice does not say what format that export takes or how long it stays available. Take your own extract of the tables above before your expiry date rather than relying on it.

Keep two clocks apart. The data migration, extracting from SYSPRO and loading the target system, takes days. Most data migrations complete within 1 to 5 business days, depending on data volume, complexity and API rate limits on the target system. Under 10,000 records can finish in under 24 hours. The ERP implementation, selecting, configuring and rolling out the new system, takes months. Your implementation partner or the vendor runs it. ClonePartner does not implement ERPs.

A read-only extract in hand lets you run unlimited sample migrations, map your plus tables and validate the data in the target system before go-live. Plan go-live for a Monday. The bulk load runs in the days before while SYSPRO stays live. SYSPRO freezes before Monday's working day starts, and a final delta of changed records takes about 30 minutes.

If NetSuite is your target, see [SYSPRO to Oracle NetSuite](https://clonepartner.com/blog/migrate/syspro-to-oracle-netsuite).

## What Should Your Next Step Be?

Start with discovery. Connect a read-only login to a restored copy of your SYSPRO company database. Run the foreign key query to map dependencies and the `INFORMATION_SCHEMA` query to find your plus tables. Then build a table-level list of what is in scope. That list is the foundation of an accurate migration plan.

If you want a second pair of eyes on the mapping, or you would rather hand the extraction and load to an engineer-led team, we can help. ClonePartner charges one fixed price per project, starting at $500, with no hourly billing ([clonepartner.com](https://clonepartner.com/pricing)).

> Book a free 30-minute scoping call. We'll review your SYSPRO table structure, map the extraction path, and give you a fixed-price proposal with no hourly billing.
>
> [Talk to us](https://clonepartner.com/talk-to-us?duration=30&utm_source=blog&utm_medium=button&utm_campaign=demo_bookings&utm_content=cta_click&utm_term=demo_button_click)

## Frequently asked questions

### What database does SYSPRO use?

SYSPRO 8 stores its data in Microsoft SQL Server. Each SYSPRO site has one system-wide database and one database per SYSPRO company. SYSPRO's database guide says all of them must be located on a single instance of SQL Server.

### What are SYSPRO plus tables?

Plus tables hold custom form data. Each one has the same name as its primary table with a '+' suffix, for example [ArCustomer+] for custom fields on customers. The end user defines their columns, so discover the structure with INFORMATION_SCHEMA.COLUMNS before you map them.

### How do I extract data from SYSPRO for migration?

For an on-premise SYSPRO, run a one-off, read-only SQL extract of the company database, ideally against a restored copy. SYSPRO's best-practice guide says direct SQL connections are "not advised" for live integrations. In Syspro Cloud ERP the read-only OData service is the only route, and it returns up to 5,000 rows per call. e.net business objects suit integration, not bulk extraction.

### What are the key SYSPRO SQL tables for a data migration?

ArCustomer (customers), ApSupplier (suppliers), InvMaster and InvWarehouse (inventory), SorMaster and SorDetail (sales orders), PorMasterHdr and PorMasterDetail (purchase orders), GenMaster and GenTransaction (general ledger), BomOperations and BomWorkCentre (routings and work centres), WipMaster (jobs), TblCurrency and TblCurrDatedRates (exchange rates), and LotDetail and InvSerialHead (traceability).

### Does my SYSPRO licence expiry change how I extract these tables?

It sets the deadline. SYSPRO licences under the old model expire on 31 October 2026 outside the US and 31 December 2026 in the US. After expiry you can no longer access SYSPRO, so take your extract before your expiry date.

### Does SYSPRO enforce foreign key constraints?

No. SYSPRO 8 creates every foreign key WITH NOCHECK, so SQL Server does not verify the rows. SYSPRO's business logic enforces integrity instead. Orphaned rows can exist, so check referential integrity before you load into a target system that enforces constraints.
