What’s New (And Undocumented) in SQL Server 2025 CTP 2.1
As the SQL Server 2025 previews continue to come out, Microsoft is making changes that they’re not telling you about. Sometimes these changes never actually go into the final production version, other times they’re held exclusively for the cloud, but sometimes – just sometimes – we get a sneak peek of something Microsoft hasn’t announced yet.
When CTP 2.0 came out, I blogged the thousands of new feature flags, messages, and system objects in SQL Server 2025 CTP 2.0, and I haven’t had the time to dig more deeply into those yet. In that post, I discussed the new sys.dm_feature_switches table, and I mentioned that it might disappear before release. Indeed it has – last week’s new CTP 2.1 removed access to that table, meaning that was probably our one-time shot to get a glimpse into something cool and undocumented. I would have loved to have been a fly on the wall when folks at Microsoft read my blog post and realized they’d left that table unguarded and publicly visible, hahaha. I love my job.
So now CTP 2.1 is out, and it comes with a few things I think you’re going to be interested in.
New Query Store Tools
The new undocumented stored procedure sp_query_store_remove_plan_feedback will probably let you remove data for specific features, like adaptive memory grants, parallelism, or cardinality estimation. There’s currently an sp_query_store_remove_plan, but that removes the entire plan rather than specific feedback attributes.
There may be a new sys.plan_persist_ce_feedback_for_expressions table – it shows up in sys.all_objects – but I haven’t been able to query it yet.
The following new messages in sys.messages appear to be related to this new feature:
- 12467: The feature_id %d is invalid.
- 12468: Removing feedback for feature_id %d is not supported.
- 12469: Removing feedback for a specific plan is not supported.
- 12470: Removing plan feedback is disabled.
New Messages
Folks using Availability Groups should read through these carefully:
- 5383: Cannot reference Index on Expression column ‘%.*s’ during index creation.
- 8070: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter %d (“%.*ls”): vector data type is not supported in TDS on the server side.
- 11449: ALTER TABLE SWITCH statement failed because the table ‘%.*ls’ has %S_MSG on it.
- 12526: An internal error occurred while cloning the specified warehouse.
- 13836: For onelake container paths, only files in ‘//Files’ directory are allowed.
- 13837: ERRORFILE path ‘%ls’ and data path ‘%ls’ must have the same onelake endpoint, workspace, artifact and folder.
- 16219: The value for %.*ls is out of range. The value must be greater than or equal to %I64u and less than or equal to %I64u.
- 17077: Error spawning Heartbeat Monitor thread: %ls
- 19545: ‘ALTER AVAILABILITY GROUP’ command failed for internal distributed availability group ‘%.*ls’. Altering internal distributed availability groups is not supported.
- 19546: ‘ALTER DATABASE SET HADR’ command failed for database ‘%.*ls’. This command is not supported for databases participating in distributed availability group with SQL Managed Instance.
- 19547: The integrity check for distributed availability group ‘%.*ls’ with SQL Managed Instance failed with error cause: ‘%S_MSG’. Corrective action: ‘%S_MSG’.
- 19548: The integrity check for distributed availability group ‘%.*ls’ with SQL Managed Instance failed with error cause: ‘An availability database ‘%.*ls’ not participating in any internal distributed availability group.’. Corrective action: ‘Remove the availability database from the availability group and add it back again.’.
- 19549: Provided distributed availability group name ‘%.*ls’ is invalid. Please provide a name of a distributed availability group with SQL Managed Instance.
- 19550: Distributed availability group with managed instance does not support having multiple databases.
- 23667: Change Streams event delivery error : ‘%ls’.
- 23668: User table ‘%s’ has reached the max number of Change Event Streaming destinations.
- 24803: Encountered failure during database upgrade of internal tables.
- 24804: This stored procedure supports only one-part or two-part names. Please use either [table] or [schema].[table].
- 24805: Column ‘%s’ of type ‘%s’ could not be validated with the underlying table. Reason: %s.
- 24806: Unexpected JSON data during parsing attempt in column type inference. Underlying data description: ‘%ls’
- 24807: Cannot parse unquoted JSON value in the property ‘%ls’. Valid unquoted values can be true, false, null, and numbers. Underlying data description: ‘%ls’
- 24808: Cannot convert a string value found in the JSON text to binary value because it is not Base64 encoded.
- 24809: One or more log or checkpoint files have been deleted or overwritten. No operations can be performed on the external table. Please recreate the external table.
- 24810: Updating source database is not supported.
- 24811: SOURCE_DATABASE can only be altered only for warehouse snapshots in LIVE mode.
- 24812: Setting SOURCE_DATABASE failed.
- 24813: Specifying an explicit value for the identity column ‘%.*ls’ in table ‘%.*ls’ is not supported.
- 25100: Storage is unavailable.
- 25101: Provided lease is broken.
- 25102: Lease was already released.
- 25103: Incompatible lease mode.
- 25104: Invalid parameter.
- 27604: Your organization Microsoft Purview Information Protection label publishing policy requires a justification when the label assigned to the column is being changed to a different label with lower priority. Provide a valid justification. Learn more: https://aka.ms/SQLPurviewLabeling
- 27605: The label with ID ‘%.*ls’ is not a valid label in Microsoft Purview Information Protection. Provide a valid label ID. Learn more: https://aka.ms/SQLPurviewLabeling
- 27606: Microsoft Purview Information Protection label can only be assigned or changed by Microsoft Entra user. Use a valid Microsoft Entra user to execute this query. Learn more
- 27607: Microsoft Purview Information Protection labels cannot be assigned when the database has existing labels assigned via the SQL Data Discovery and Classification feature. Remove any existing labels from the database prior to assigning Microsoft Purview Information Protection labels. Learn more https://aka.ms/SQLPurviewLabeling
- 27608: Labels via the SQL Data Discovery and Classification feature cannot be assigned when the database has existing Microsoft Purview Information Protection labels assigned to it. Remove any existing labels from the database and then try again. Learn more
- 27609: Internal error occurred while running billing background task. Major error code: %d, Minor error code: %d, State: %d.
- 27610: Unable to access Microsoft Purview Information Protection on your behalf because your session has expired. Reconnect to SQL database and try again.
- 31208: A fulltext fragment table is missing.
- 31644: Config server option ‘allow server scoped db credentials’ is disabled.
- 31734: The value ‘%I64d’ is not within range for the ‘%ls’ parameter.
- 31735: The JSON value for the JSON key ‘%ls’ must be ‘%.*ls’ type.
- 31736: An error occurred during the execution of the function.
- 31737: The size of the provided %ls would be at least %u bytes after converting to UTF-8, which exceeds the maximum allowed size of %u bytes.
- 31738: Initialization of the ‘%ls’ process with session ID ‘%ls’ failed with HRESULT 0x%08x.
- 31739: Generating embeddings from ‘%ls’ process with session ID ‘%ls’ failed with HRESULT 0x%08x.
- 31740: An internal error has occurred in AI runtime with session ID ‘%ls’. Retry the operation, if the issue persists, contact support for assistance.
- 35541: ai_generate_chunks
- 35542: Drop and re-create the distributed availability group with SQL Managed Instance.
- 35543: Stored procedure called on invalid distributed availability group type or on non-existing distributed availability group.
- 35544: Empty internal distributed availability group.
- 35545: Internal distributed availability group naming inconsistency.
- 35546: An internal distributed availability group detected with more than one associated availability database.
- 37579: The security policy ‘%.*ls’ cannot reference tables with vector indexes. Table ‘%.*ls’ has a vector index.
- 42241: Input JSON contains out-of-range values for %ls.
- 42242: Input JSON contains %ls type which is not supported in ARM64 architecture.
- 42243: VECTOR_DISTANCE function does not support different base types for vector arguments.
- 42244: A vector index cannot be created on tables with security policies. Table ‘%.*ls’ has security policy ‘%.*ls’.
- 42245: Drop and recreate the incompatible vector index ID %d on object ID %d.
- 45943: “The long-term retention backup with the desired legal hold value already exists backup file backup. ErrorOwner: sqldataintegration
- 46560: External Table Location option must be a valid OneLake path.
- 47700: Reason: The External Provider Access Token used for authenticating to the SQL Server is Blocklisted.
- 49538: The dynamic space management force reset operation was aborted because the connected server is not a page server.
- 49539: The dynamic space management force reset operation has failed for database ID %d, mode ID %d, failure name %ls.
Related

Hi! I’m Brent Ozar.
I make Microsoft SQL Server go faster. I love teaching, travel, cars, and laughing. I’m based out of Las Vegas. He/him. I teach SQL Server training classes, or if you haven’t got time for the pain, I’m available for consulting too.
Get Free SQL Stuff
"*" indicates required fields

5 Comments. Leave new
best practice configuration changes after SQL installation.
But is Microsoft adding support for any of the following in Availability Groups:
synchronizing logins and passwords for SQL Server logins across nodes
synchronizing scheduled jobs across nodes
adding a preferred node option to scheduled jobs
This is basic functionality they’ve had >10 years to include which admins want far more than a few debug options on query plans.
Some of this is available in Contained Availability Groups
I guess they don’t have any incentive to do that given that all of that can be done with dbatools PowerShell module and some basic T-SQL (for determining primary AG node).
Nice Brent,
I cant even get it to install, keeps complaining about AD Account passwords or dies installing ODBC 17