Year-Suffixed System Views in SQL Server 2025
You upgrade a monitoring query for SQL Server 2025, and then you notice names in sys.system_objects that look as if they belong to older versions: sysquery_store_runtime_stats_2016, sysquery_store_runtime_stats_2017, sysquery_store_runtime_stats_2019, and syscolumns_2019. The names are new in the SQL Server 2025 inventory, but their suffixes point backwards.

I am comparing SQL Server 2022 CU25 (cumulative update 25) with SQL Server 2025 CU9 (cumulative update 9) for the first post on SQL Server 2025. I am using the same inventory method that started in the first post in this series. The previous post covered removed system objects in SQL Server 2025.
SQL Server 2025 CU9 adds 15 system objects whose names end in a year suffix from _2016 through _2021. All 15 are views in sys.system_objects. None of the matching names appear in the SQL Server 2019 or SQL Server 2022 inventories. The SQL Server 2025 RTM (release to manufacturing) inventory has the same 15 names as CU9.
I did not find any column names ending in _2005 through _2025 in the three main inventories. In this data set, the year suffixes are on object names, not column names.
What I looked for
I searched the 2019, 2022 and 2025 CU9 inventories for object and column names that end in _2005 through _2025. The inventory includes system object types P, FN, IF, TF, V, X, AF, PC, FS and FT. It also includes columns for views, inline table-valued functions, table-valued functions and extended stored procedures. Microsoft documents sys.system_objects as the catalog view that contains schema-scoped system objects, and its type_desc column identifies the object type.[1]
This query shows the shape of the search against the tab-separated inventories:
|
1 2 3 |
category = object or column name ends with _2005 through _2025 inventory files = 2019, 2022, 2025 CU9, and 2025 RTM inventories |
The result was narrow enough to list:
| Object | Type | Present in 2019 | Present in 2022 | Present in 2025 CU9 | Present in 2025 RTM |
|---|---|---|---|---|---|
sys.syscolumn_store_segments_2020 |
VIEW | No | No | Yes | Yes |
sys.syscolumns_2019 |
VIEW | No | No | Yes | Yes |
sys.sysdatabase_principals_2021 |
VIEW | No | No | Yes | Yes |
sys.sysexternal_data_sources_2016 |
VIEW | No | No | Yes | Yes |
sys.sysexternal_data_sources_2017 |
VIEW | No | No | Yes | Yes |
sys.sysexternal_file_formats_2016 |
VIEW | No | No | Yes | Yes |
sys.sysexternal_tables_2016 |
VIEW | No | No | Yes | Yes |
sys.sysquery_context_settings_2016 |
VIEW | No | No | Yes | Yes |
sys.sysquery_store_query_hints_2019 |
VIEW | No | No | Yes | Yes |
sys.sysquery_store_runtime_stats_2016 |
VIEW | No | No | Yes | Yes |
sys.sysquery_store_runtime_stats_2017 |
VIEW | No | No | Yes | Yes |
sys.sysquery_store_runtime_stats_2019 |
VIEW | No | No | Yes | Yes |
sys.sysquery_store_runtime_stats_interval_2016 |
VIEW | No | No | Yes | Yes |
sys.sysquery_store_wait_stats_2019 |
VIEW | No | No | Yes | Yes |
sys.sysserver_principals_2021 |
VIEW | No | No | Yes | Yes |
I searched the MicrosoftDocs SQL, Azure and Fabric documentation repositories for each full name and for each name without the sys. prefix. I found no hits for any of the 15 names. That is a documentation search result, not proof that no documentation exists somewhere else.
They are visible, but not selectable
These views are visible through sys.system_objects, and OBJECT_DEFINITION returns their definitions from a normal connection on the 2025 instance. Name resolution does not treat them like ordinary catalog views.
I used this read-only probe from two connection types. The first was a normal connection. The second was the Dedicated Admin Connection (DAC), which is the admin-only connection SQL Server exposes for troubleshooting:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
SELECT [name] , [type_desc] , [is_ms_shipped] , [object_id_by_name] = OBJECT_ID(N'sys.' + [name]) FROM [sys].[system_objects] WHERE [name] LIKE N'%[_]20[0-2][0-9]' ORDER BY [name]; SELECT TOP (0) * FROM [sys].[sysquery_store_runtime_stats_2019]; |
The catalog query returned the 15 rows with type_desc = VIEW, is_ms_shipped = 1, and OBJECT_ID(N'sys.' + name) = NULL. The direct SELECT TOP (0) failed with Msg 208, Invalid object name, from both the normal connection and the DAC.
The failed name resolution limits the conclusion. These are view definitions present in the system catalog. They are not views that I could query by name from the tested instance.
The Query Store pattern
The Query Store objects show the pattern most clearly. Query Store stores query text, plans, runtime statistics and wait statistics for later analysis.[2] The year-suffixed Query Store views mostly select from older shapes of the same internal storage.
The three runtime-statistics views differ by column set:
| View | Underlying object in the definition | Columns |
|---|---|---|
sys.sysquery_store_runtime_stats_2016 |
sys.sysplan_persist_runtime_stats_merged_2016 |
53 |
sys.sysquery_store_runtime_stats_2017 |
sys.sysplan_persist_runtime_stats_merged_2017 |
68 |
sys.sysquery_store_runtime_stats_2019 |
sys.sysplan_persist_runtime_stats_merged_2019 |
73 |
sys.query_store_runtime_stats |
documented catalog view | 74 |
Microsoft’s source file for sys.query_store_runtime_stats documents the unsuffixed catalog view and its columns.[3] The 2016 version has the older runtime, CPU, logical I/O, physical I/O, CLR, degree of parallelism, memory and row-count metrics. The 2017 version adds the log-byte, physical-read-count and tempdb page metrics. The 2019 version adds the page-server read metrics. The current unsuffixed view adds replica_group_id, which Microsoft documents as applying to SQL Server 2022 and later.
The same replica_group_id gap appears in two other Query Store views. Microsoft documents replica_group_id in sys.query_store_query_hints, but sys.sysquery_store_query_hints_2019 has the same list without that column.[4] Microsoft also documents replica_group_id in sys.query_store_wait_stats, while sys.sysquery_store_wait_stats_2019 omits it.[5]
The other Query Store year-suffixed views are closer to the current views. sys.sysquery_context_settings_2016 has the same 12 columns as sys.query_context_settings. sys.sysquery_store_runtime_stats_interval_2016 has the same four columns as sys.query_store_runtime_stats_interval.
The other compatibility shapes
The external table group points at PolyBase-era metadata. sys.sysexternal_data_sources_2016 and sys.sysexternal_data_sources_2017 both select from sys.sysextsources. The 2017 view differs from the 2016 view only by applying UPPER() to type_desc. The current sys.external_data_sources view has two more columns: connection_options and pushdown.
sys.sysexternal_file_formats_2016 selects from sys.sysextfileformats and omits first_row and parser_version, which are present in the current sys.external_file_formats view. sys.sysexternal_tables_2016 selects from sys.sysexttables joined to sys.objects$ and omits partition_type, partition_desc, rejected_row_location and table_options, which are present in sys.external_tables.
The principal views look like older security shapes. sys.sysdatabase_principals_2021 has the same columns as sys.database_principals except tenant_id. sys.sysserver_principals_2021 has the same relationship to sys.server_principals: current view plus tenant_id, year-suffixed view without it.
sys.syscolumns_2019 is a little different. Its column list matches sys.columns in the 2025 CU9 inventory, including the SQL Server 2025 vector columns vector_dimensions, vector_base_type and vector_base_type_desc, which Microsoft documents on sys.columns.[6] The definition still exposes a 2019-named view, but the projection is not frozen at the 2019 public column list.
sys.syscolumn_store_segments_2020 selects from sys.syscscolsegments, joins rowset and column metadata, and unions that with OPENROWSET(TABLE HKCS_SEGMENTS). The current sys.column_store_segments view has three more columns in the inventory: collation_id, min_deep_data and max_deep_data.
What I think this means
This section is inference. I could not query these objects directly, and I did not find Microsoft documentation for them.
The evidence suggests that SQL Server 2025 carries internal compatibility projections for older metadata shapes. The suffixes correspond to versions associated with those metadata shapes. The examples include Query Store in 2016 and 2017, Query Store page-server metrics in 2019, external table metadata around 2016 and 2017, and principal metadata before tenant_id appeared. I cannot establish why SQL Server keeps those shapes. The view definitions often select from internal objects with matching year suffixes, such as sys.sysplan_persist_runtime_stats_merged_2016 and sys.sysplan_persist_wait_stats_merged_2019.
I do not have evidence that these views are for customers. The failed SELECT TOP (0) is consistent with the objects not being intended for direct use. A more cautious explanation is that they exist for upgrade code, compatibility validation, or older Microsoft client components that need a stable metadata shape.
A row in sys.system_objects is not sufficient evidence that the object can be queried by name. Some rows can be inventoried and compared even though the objects cannot be queried directly.
Next, I am looking at the sys.dm_hadr_internal_* views added in SQL Server 2025.
Have you seen these year-suffixed names in your own tools, or do you know which component uses them? Tell me on Bluesky or LinkedIn, and I will update the notes.
References
- sys.system_objects (Transact-SQL) - MicrosoftDocs/sql-docs. Documents that
sys.system_objectscontains schema-scoped system objects and lists thetype_descvalues, includingVIEW. ↩ - How Query Store collects data - MicrosoftDocs/sql-docs. Describes Query Store catalog views and what
sys.query_store_runtime_statsstores. ↩ - sys.query_store_runtime_stats (Transact-SQL) - MicrosoftDocs/sql-docs. Documents the unsuffixed runtime statistics view and its version-specific columns. ↩
- sys.query_store_query_hints (Transact-SQL) - MicrosoftDocs/sql-docs. Documents
replica_group_idin the unsuffixed Query Store hints view. ↩ - sys.query_store_wait_stats (Transact-SQL) - MicrosoftDocs/sql-docs. Documents
replica_group_idin the unsuffixed Query Store wait statistics view. ↩ - sys.columns (Transact-SQL) - MicrosoftDocs/sql-docs. Documents the SQL Server 2025 vector metadata columns in
sys.columns. ↩