What This Table Is
The sys_update_set table stores update set records — containers that hold configuration changes for migration between ServiceNow instances. Each record represents a logical grouping of system modifications like new Business Rules, modified forms, or updated workflows that developers package together for deployment.
This table is owned by the Development module and supports the entire application lifecycle management process. Update sets track their progression through states like In development, Complete, Committed, and Retrieved as they move from development instances through testing to production environments.
The table extends sys_metadata and acts as a parent to the sys_update_xml table, which stores the individual configuration changes within each update set. Remote update sets (sys_remote_update_set) are created when update sets are retrieved from other instances and represent the imported version before commitment.
Large enterprises typically see hundreds of update sets per instance, with development instances containing 50-200 active update sets at any time. The table performs well for standard queries, but joins against sys_update_xml can be expensive since individual update sets may contain thousands of configuration changes.
When You'll Script Against This Table
You'll script against sys_update_set primarily in Background Scripts during deployment automation, Scheduled Jobs for update set management, and Script Includes that handle application lifecycle processes. Business Rules on this table are less common but useful for notifications when update sets change state.
Access to this table requires the admin role or update_set_manager role. The table operates in global scope, and scoped applications have limited visibility — they can typically only see update sets they own through the application field reference.
- Automated deployment scripts that query update sets by state and application
- Release management reports showing update set progression through environments
- Cleanup routines that archive old update sets or identify stale development containers
- Merge conflict detection that compares update sets targeting the same configuration objects
- Audit trails that track who created, modified, or deployed specific update sets
- Bulk operations that set multiple update sets to Complete state for batch deployment
- Integration scripts that export update set metadata to external change management systems
Table Gotchas
Update sets in 'ignore' state still exist in the database and appear in GlideRecord queries unless explicitly filtered out. Always include state conditions in your queries.
- The
is_defaultfield doesn't mean "currently active" — it identifies the default update set but there can be multiple records with this flag set to true across different applications.
The 'complete' state is not the same as 'committed'. Complete update sets are ready for export but haven't been deployed yet. Committed means successfully applied to the target instance.
- Queries joining to
sys_update_xmlcan be expensive. Theupdate_setfield insys_update_xmlis indexed, but large update sets with thousands of changes will still perform slowly. - The
applicationfield can be empty for global update sets, and the reference qualifier changes behavior in scoped applications — always null-check this field in cross-scope scripts.
Update sets marked as 'in development' by one user can still be modified by other users with appropriate roles. The created_by field doesn't establish ownership for write access.
- The
release_datefield is manually set and not automatically populated when state changes occur — don't rely on it for accurate deployment timing.
Enjoying this? Get one deep-dive per week.
Join 1,000+ ServiceNow pros — scripts, GlideRecord patterns, Flow Designer techniques, and career moves. Free.
Related Tables
The sys_update_xml table contains the individual configuration changes within each update set. You'll frequently join these tables to analyze what changes are included in specific update sets or to perform bulk operations across configuration items. The sys_remote_update_set table stores imported update sets before they're committed, and you'll query both together during deployment processes to track the progression from remote to local.
The sys_app table connects through the application field to identify which scoped application owns each update set. The sys_user table links through sys_created_by and sys_updated_by for audit trails and ownership tracking in deployment automation.
During deployment processes, you'll often cross-reference the sys_update_version table to track version history of configuration changes, and the sys_upgrade_history table to understand how update sets relate to instance upgrades and application installations.