How to fix Error 9973 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9973 – Full-Text Population Paused

Why This Error Happens

Error 9973 is an informational message indicating that SQL Server has automatically paused full-text index population for a specific table or indexed view. This typically occurs due to insufficient system resources (memory or disk I/O contention), a concurrent operation locking the base table (such as a schema change, bulk insert, or index rebuild), or the Full-Text Filter Daemon Host (MSSQLFDLauncher) service encountering throttling limits during a crawl. In most cases, this is a self-correcting throttle mechanism rather than a critical failure, but persistent pausing often points to resource contention or a stalled crawl process.

Step-by-Step Resolution Guide

Step 1: Verify the Full-Text Service Status

  • Open Services.msc on Windows Server 2025 / Windows 11 and confirm that SQL Full-Text Filter Daemon Launcher (MSSQLFDLauncher) is running.
  • If stopped, right-click and select Start, then set Startup Type to Automatic to prevent recurrence on reboot.
  • Check the SQL Server Error Log (C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG) for correlating entries around the timestamp of Error 9973.

Step 2: Check for Resource Contention or Blocking Transactions

  • Run the following query to identify blocking sessions against the target table:
SELECT blocking_session_id, session_id, wait_type, wait_time 
FROM sys.dm_exec_requests 
WHERE blocking_session_id <> 0;
  • If a long-running transaction (e.g., bulk insert, ALTER INDEX) is holding a schema lock, allow it to complete or safely terminate it using KILL <session_id>.
  • Review memory pressure via sys.dm_os_memory_clerks to rule out the full-text engine being starved of RAM.

Step 3: Manually Resume the Full-Text Population

  • Execute a manual resume command to force SQL Server to restart the crawl:
ALTER FULLTEXT INDEX ON [YourTableName] RESUME POPULATION;
  • If the resume fails, drop and recreate the full-text catalog associated with the index to clear any corrupted population metadata:
ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;

Step 4: Restart the SQL Server Instance (If Persistent)

  • If the pause recurs immediately after resuming, restart the SQL Server (MSSQLSERVER) service via Services.msc to clear any hung full-text engine threads.
  • Ensure no scheduled maintenance plans (like Index Optimization jobs) are running concurrently with the full-text crawl, as this is a common trigger on Windows Server 2025 due to updated I/O scheduling priorities.

Alternative or Verification Steps

  • Verify the fix by querying SELECT * FROM sys.dm_fts_index_population; to confirm the status_description column now reads “In progress” or “Idle” rather than “Paused.”
  • If the error persists specifically after a Windows Update on Server 2025, check for a pending OS reboot, as unapplied kernel patches can sometimes interfere with the Filter Daemon Host’s handle to the file system.

How to fix Error 9970 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9970 – Full-Text Key Offline

Why This Error Happens

Error 9970 occurs when the full-text key column (the unique index column used by the Full-Text Engine) for a table or indexed view is marked offline, typically because the underlying filegroup containing the full-text key index is unavailable or has been taken offline. This can also happen when the database is in a suspect or recovery-pending state, preventing SQL Server 2025 from validating the uniqueness of the key during full-text crawl or query operations. Corrupted full-text catalog metadata or an incomplete database restore/attach operation can also trigger this condition.

Step-by-Step Resolution Guide

Step 1: Verify the Filegroup and Database State

  • Open SQL Server Management Studio (SSMS) and connect to the SQL Server 2025 instance.
  • Run the following query to check filegroup status:
SELECT name, state_desc FROM sys.filegroups;
  • Confirm the database itself is online by running:
SELECT name, state_desc FROM sys.databases WHERE name = 'YourDatabaseName';
  • If the state shows “OFFLINE” or “RECOVERY_PENDING,” proceed to bring the filegroup/database back online.

Step 2: Bring the Offline Filegroup or Database Online

  • If a specific filegroup is offline, run:
ALTER DATABASE YourDatabaseName MODIFY FILEGROUP [FilegroupName] ONLINE;
  • If the entire database is offline due to a file issue, locate the physical data file path (commonly under C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA\ on Windows Server 2025).
  • Ensure the SQL Server service account has Read/Write NTFS permissions on this folder via File Properties > Security > Edit.
  • Attempt to bring the database online:
ALTER DATABASE YourDatabaseName SET ONLINE;

Step 3: Rebuild the Full-Text Index

  • Once the filegroup is online, the full-text key index itself may need repair. Drop and recreate the full-text index on the affected table:
DROP FULLTEXT INDEX ON YourTableName;
GO
CREATE FULLTEXT INDEX ON YourTableName(ColumnName)
KEY INDEX PK_YourTableName
ON YourFullTextCatalogName;
GO
  • Start a full repopulation to ensure the crawl completes cleanly:
ALTER FULLTEXT INDEX ON YourTableName START FULL POPULATION;

Step 4: Restart the Full-Text Daemon Service

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER).
  • Right-click and select Restart to clear any stale locks on the full-text key index.

Alternative or Verification Steps

  • Verify the fix by querying sys.fulltext_indexes and checking that the is_enabled column returns 1, and confirm the crawl status via SELECT FULLTEXTCATALOGPROPERTY('CatalogName', 'PopulateStatus'); (a result of 0 indicates idle/success).
  • If the filegroup remains corrupted and cannot be brought online, restore the database from the last known good backup using RESTORE DATABASE YourDatabaseName FROM DISK = 'BackupPath' WITH RECOVERY; to reset the full-text key indexes entirely.

How to fix Error 9971 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9971 – No Appropriate Filter for Embedded Object

Why This Error Happens

This warning occurs when SQL Server’s full-text indexing engine encounters a document type (embedded inside a column, such as a .docx, .pdf, or .zip file) for which no corresponding iFilter is registered or installed on the server. It can also happen if the filter DLL exists but is corrupted, outdated, or blocked due to missing file type associations in the sys.fulltext_document_types table. Additionally, 64-bit vs. 32-bit filter mismatches on Windows Server 2025 are a common root cause, as SQL Server 2025 requires filters compiled for the correct architecture.

Step-by-Step Resolution Guide

Step 1: Identify the Problematic Document Type

  • Check the SQL Server Error Log or Event Viewer (Event ID 9971) to find the table ID and document causing the failure.
  • Run the following query to cross-reference registered filters:
SELECT * FROM sys.fulltext_document_types ORDER BY document_type;
  • Confirm if the file extension (e.g., .pdf, .zip, .msg) is missing from this list.

Step 2: Install or Repair the Missing iFilter

  • Download and install the correct iFilter package for the file type (e.g., Adobe PDF iFilter, Microsoft Office Filter Pack) matching your SQL Server 2025 architecture (x64).
  • Place the filter DLL in the expected SQL Server Binn directory, typically: C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn\FTData\
  • Register the filter using regsvr32 if it did not self-register during installation:
regsvr32 "C:\Program Files\Common Files\Microsoft Shared\Filters\PDFFilter64.dll"

Step 3: Register the Filter with SQL Server

  • Open SQL Server Management Studio (SSMS) and run the following stored procedure to load the new filter into the full-text engine:
EXEC sp_fulltext_service 'load_os_resources', 1;
EXEC sp_fulltext_service 'update_languages';
  • Restart the SQL Server Full-Text Filter Daemon Launcher service via services.msc or PowerShell:
Restart-Service -Name "MSSQLFDLauncher"

Step 4: Rebuild the Full-Text Index

  • Navigate to the affected table in SSMS Object Explorer.
  • Right-click the Full-Text Index node and select Rebuild to force SQL Server to re-scan the documents using the newly registered filter.
  • Alternatively, run via T-SQL:
ALTER FULLTEXT INDEX ON [dbo].[YourTable] START FULL POPULATION;

Alternative or Verification Steps

  • Verify the fix: Re-run the full population and check the SQL Server Error Log; Error 9971 should no longer appear for the specific document type, and sys.dm_fts_index_population should show a status of “Idle” without errors.
  • Alternative solution: If a native iFilter does not exist for the file type (e.g., proprietary binary formats), exclude the specific column or file type from full-text indexing by modifying the type column mapping to prevent SQL Server from attempting to parse unsupported embedded objects.

How to fix Error 9968 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9968 – No Appropriate Filter Found During Full-Text Index Population

Why This Error Happens

This error occurs when SQL Server’s full-text engine encounters a document or column data type for which no compatible IFilter is registered or installed on the system. It commonly happens when a specific file format extension (such as .pdf, .docx, or .xml) is indexed, but the corresponding filter DLL is missing, unregistered, or incompatible with the SQL Server 2025 full-text component. This can also occur after an OS upgrade to Windows Server 2025 or Windows 11, where previously registered filters were not migrated or re-registered correctly.

Step-by-Step Resolution Guide

Step 1: Identify the Missing Filter and Affected Document Type

  • Check the SQL Server error log for the exact table, column, and document type triggering Error 9968.
  • Run the following query to see currently loaded filters and document types:
  • EXEC sp_help_fulltext_system_components 'filter';
  • Cross-reference the file extension causing the issue (e.g., .pdf) against the returned list of supported classes_id and extensions.

Step 2: Install or Reinstall the Required IFilter

  • Download and install the correct IFilter package for the file type (e.g., Microsoft Office Filter Pack for Office documents, or Adobe PDF IFilter 64-bit for PDFs).
  • Ensure you install the 64-bit version to match SQL Server 2025’s 64-bit architecture requirements on Windows Server 2025/Windows 11.
  • Place the filter DLL in a known directory, such as C:\Program Files\Microsoft Office\Filters or the vendor-specified install path.

Step 3: Register the Filter with SQL Server’s Full-Text Engine

  • Open an elevated Command Prompt and register the filter DLL using regsvr32 if it was not auto-registered:
  • regsvr32 "C:\Program Files\Microsoft Office\Filters\FilterName.dll"
  • Update the full-text search component registry to recognize the new filter:
  • EXEC sp_fulltext_service 'load_os_resources', 1;
  • EXEC sp_fulltext_service 'verify_signature', 0; (only if signature verification is blocking a legitimate filter)

Step 4: Restart the Full-Text Search Service and Rebuild the Index

  • Restart the SQL Server Full-Text Filter Daemon Launcher service via services.msc or run:
  • net stop MSSQLFDLauncher$MSSQLSERVER
  • net start MSSQLFDLauncher$MSSQLSERVER
  • Rebuild the full-text catalog to force re-population:
  • ALTER FULLTEXT CATALOG YourCatalogName REBUILD;

Alternative or Verification Steps

  • Verify the fix by querying sys.fulltext_document_types to confirm the file extension now appears in the list of supported types, then re-run a full population and check the error log for Error 9968 recurrence.
  • As an alternative, if the IFilter is deprecated or unavailable for Windows Server 2025, exclude the problematic file type from full-text indexing using sp_fulltext_column to disable indexing on that specific column, avoiding the warning entirely while preserving indexing on supported types.

How to fix Error 9969 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9969 – No Appropriate Wordbreaker Found During Full-Text Index Population

Why This Error Happens

This error occurs when SQL Server’s Full-Text Engine cannot locate a registered wordbreaker or stemmer component for the language LCID assigned to a specific column in the full-text index. This typically happens after an in-place upgrade (such as to SQL Server 2025) where language resource DLLs were not properly re-registered, or when a third-party/custom language pack was removed or corrupted. It can also occur if the column’s language attribute points to an LCID that does not have a corresponding wordbreaker installed on the Windows Server 2025 / Windows 11 host.

Step-by-Step Resolution Guide

Step 1: Identify the Problematic Language and Column

  • Run the following query to find which column and language LCID triggered the warning:
  • SELECT sfc.*, c.name AS ColumnName FROM sys.fulltext_index_columns sfc JOIN sys.columns c ON sfc.column_id = c.column_id AND sfc.object_id = c.object_id;
  • Cross-reference the language_id value against sys.fulltext_languages to confirm which wordbreaker is missing.
  • Check the SQL Server Error Log for the exact table name and table ID referenced in Error 9969.

Step 2: Verify Wordbreaker Registration in the Registry

  • Open regedit and navigate to:
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSearch\Language
  • Confirm that the LCID identified in Step 1 has a valid entry pointing to a .dll wordbreaker file (e.g., sqlino.dll for neutral/English breakers).
  • If the entry is missing or the path is broken, the wordbreaker component failed to register during setup or upgrade.

Step 3: Repair or Reinstall the Full-Text Component

  • Launch SQL Server Installation Center from the Windows 11 / Windows Server 2025 Start Menu.
  • Select Maintenance > Repair, choose the affected instance, and ensure “Full-Text and Semantic Extractions for Search” is checked for repair.
  • Alternatively, manually re-register the wordbreaker DLLs by running:
  • regsvr32 "C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn\sqlino.dll"
  • Restart the SQL Server service (MSSQLSERVER) and the Full-Text Filter Daemon Launcher service after registration.

Step 4: Change the Column Language or Reset to Neutral

  • If a specific language pack cannot be restored, alter the column to use the Neutral language, which uses a generic wordbreaker available by default:
  • EXEC sp_fulltext_column 'TableName', 'ColumnName', 'add', 0; (where 0 represents the Neutral LCID)
  • Drop and recreate the full-text index on the affected table to apply the language change.

Step 5: Repopulate the Full-Text Catalog

  • Force a full population to confirm the fix resolves the indexing warning:
  • ALTER FULLTEXT INDEX ON dbo.YourTableName START FULL POPULATION;
  • Monitor the SQL Server Error Log during population to ensure Error 9969 no longer appears for the table ID in question.

Alternative or Verification Steps

  • Verify success by querying sys.dm_fts_index_population during the population process; the status_description should show “In progress” or “Idle” without throwing warnings in the error log.
  • If the issue persists after repair, uninstall and reinstall the “Full-Text and Semantic Extractions for Search” feature entirely via Add or Remove Programs > Modify on the SQL Server 2025 installation to force a clean reinstallation of all language resource files.

How to fix Error 9967 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9967 – Default Full-Text Catalog Missing in SQL Server 2025

Why This Error Happens

This error occurs when a database does not have a default full-text catalog assigned, which is required before executing certain full-text indexing commands such as CREATE FULLTEXT INDEX without an explicit ON catalog clause. It can also be triggered if the executing user lacks the necessary permissions (such as CREATE FULLTEXT CATALOG or db_owner rights) on the target database. Additionally, if a previously existing catalog was dropped, corrupted, or not properly migrated during an upgrade to SQL Server 2025, the database loses its default catalog reference.

Step-by-Step Resolution Guide

Step 1: Verify Full-Text Service is Installed and Running

  • Open SQL Server Configuration Manager on Windows Server 2025 / Windows 11.
  • Check that SQL Server Full-Text Filter Daemon Launcher service is present and running for your instance.
  • If missing, re-run SQL Server 2025 Setup, select Database Engine Services, and add the Full-Text and Semantic Extractions for Search feature.

Step 2: Confirm User Permissions on the Database

  • Connect via SQL Server Management Studio (SSMS) using an account with sysadmin or db_owner rights.
  • Run the following to validate permissions:
  SELECT HAS_PERMS_BY_NAME(DB_NAME(), 'DATABASE', 'CREATE FULLTEXT CATALOG');
  • If the result returns 0, grant permissions:
  GRANT CREATE FULLTEXT CATALOG TO [YourUserName];

Step 3: Create a Default Full-Text Catalog

  • Execute the following T-SQL script against the affected database:
  USE [YourDatabaseName];
  GO
  CREATE FULLTEXT CATALOG ft_default_catalog AS DEFAULT;
  GO
  • Ensure the catalog path (if specified) points to a valid directory accessible by the SQL Server service account, e.g., C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData.

Step 4: Rebuild or Reassign the Catalog if Corrupted

  • If a catalog previously existed but is now inaccessible, check its status:
  SELECT * FROM sys.fulltext_catalogs;
  • If it appears orphaned or corrupted, drop and recreate it:
  DROP FULLTEXT CATALOG ft_default_catalog;
  CREATE FULLTEXT CATALOG ft_default_catalog AS DEFAULT;

Step 5: Restart SQL Server Service

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Restart SQL Server (MSSQLSERVER) and SQL Server Full-Text Filter Daemon Launcher services to apply changes cleanly.

Alternative or Verification Steps

  • Run SELECT name, is_default FROM sys.fulltext_catalogs; to confirm a catalog now exists and is_default = 1.
  • If the issue persists, try creating the full-text index again using an explicit catalog reference: CREATE FULLTEXT INDEX ON TableName(Column) KEY INDEX PK_Name ON ft_default_catalog;

How to fix Error 9965 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9965 – “NULL or Invalid Type of Value Specified for ‘%ls’ Parameter”

Why This Error Happens

Error 9965 typically occurs when a system function, stored procedure, or extended property call receives a NULL value or an incompatible data type where a valid, non-null parameter is expected. This is common when working with FILESTREAM operations, full-text search configurations, or custom functions in SQL Server 2025 where strict type-checking was introduced or tightened. It can also surface due to corrupted metadata in system catalogs or improperly cast variables passed through dynamic SQL or application connection strings on Windows Server 2025 / Windows 11.

Step-by-Step Resolution Guide

Step 1: Identify the Exact Query or Procedure Triggering the Error

  • Open SQL Server Management Studio (SSMS) and check the Activity Monitor or enable a trace using Extended Events to capture the exact statement.
  • Look at the SQL Server error log located at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG for the full stack and parameter context.
  • Note the specific parameter name replacing %ls in the error message, as this points directly to the offending function or procedure.

Step 2: Validate and Correct the Parameter Data Types

  • Review the procedure or query and ensure all parameters passed match the expected data type (e.g., NVARCHAR vs VARCHAR, INT vs BIGINT).
  • Explicitly cast or convert values using CAST() or CONVERT() before passing them into system functions like sys.sp_addextendedproperty or FILESTREAM-related calls.
  • Run the following check to isolate NULL values in your dataset:
SELECT * FROM YourTable WHERE YourColumn IS NULL;
  • Update application code or ORM mappings (Entity Framework, Dapper) to prevent NULL being passed where NOT NULL is required.

Step 3: Repair or Rebuild Affected System Metadata

  • If the error persists on system-level objects, run DBCC CHECKDB to rule out corruption:
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
  • If corruption is found in system tables, restore from the most recent known-good backup rather than attempting an in-place repair.
  • Ensure the SQL Server service account has the necessary permissions on C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA to read/write metadata files correctly.

Step 4: Update SQL Server 2025 and Verify Compatibility Level

  • Check for the latest Cumulative Update (CU) via SQL Server Setup or the Microsoft Update Catalog, as early 2025 builds have known type-validation bugs in certain system procedures.
  • Verify your database compatibility level matches SQL Server 2025 standards:
ALTER DATABASE YourDatabaseName SET COMPATIBILITY_LEVEL = 170;
  • Restart the SQL Server (MSSQLSERVER) service via services.msc on Windows Server 2025 / Windows 11 after applying updates.

Alternative or Verification Steps

  • Re-run the original query or application transaction that triggered Error 9965 and confirm it completes without exceptions in the SQL Server error log.
  • As an alternative, isolate the issue by executing the procedure manually in SSMS with hardcoded, known-good values for each parameter — if it succeeds, the root cause is upstream in the application layer passing NULL/invalid data types.

How to fix Error 9966 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9966 — “Cannot Use Full-Text Search in Master”

Why This Error Happens

Error 9966 occurs because SQL Server does not permit full-text indexing or full-text catalog operations to be performed against the master system database by design. This typically happens when a script, application, or user accidentally executes a full-text search command (such as CREATE FULLTEXT CATALOG or CREATE FULLTEXT INDEX) while their default database context is still set to master instead of a user database. It can also surface if a connection string or login’s default database was never properly configured, silently defaulting new sessions to master.

Step-by-Step Resolution Guide

Step 1: Verify Your Current Database Context

  • Open SQL Server Management Studio (SSMS) or Azure Data Studio and run SELECT DB_NAME(); to confirm you are not currently pointed at master.
  • Check the database dropdown in the SSMS toolbar to visually confirm the active context.

Step 2: Switch to the Correct User Database

  • Execute USE YourDatabaseName; at the top of your script before running any full-text commands.
  • Re-run your CREATE FULLTEXT CATALOG or CREATE FULLTEXT INDEX statement immediately after the USE statement in the same batch.

Step 3: Update the Login’s Default Database

  • Navigate to Security > Logins in SSMS, right-click the affected login, and select Properties.
  • On the General page, change the Default database dropdown from master to the intended application database.
  • Alternatively, run: ALTER LOGIN [YourLoginName] WITH DEFAULT_DATABASE = YourDatabaseName;

Step 4: Audit Connection Strings and Application Code

  • Check appsettings.json, web.config, or ODBC/DSN configurations on Windows Server 2025 or Windows 11 for a missing or incorrect Initial Catalog / Database parameter.
  • Add Initial Catalog=YourDatabaseName; explicitly to prevent the connection from defaulting to master.

Step 5: Confirm Full-Text Service Is Enabled on the Target Database

  • Run SELECT DATABASEPROPERTYEX('YourDatabaseName', 'IsFullTextEnabled'); to ensure it returns 1.
  • If it returns 0, enable it with EXEC sp_fulltext_database 'enable'; while connected to that specific database.

Alternative or Verification Steps

  • Verify the Fix: Re-run the original CREATE FULLTEXT INDEX or CREATE FULLTEXT CATALOG command after confirming SELECT DB_NAME(); returns the correct user database name — it should now execute without Error 9966.
  • Alternative: If the error persists in automated jobs, check SQL Server Agent job steps for a hardcoded “Database” field set to master and update it to the correct target database.

How to fix Error 9963 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9963 – Inconsistent Accent Sensitivity in Full-Text Catalog

Why This Error Happens

This error occurs when the accent sensitivity (AS) setting of a full-text catalog does not match the accent sensitivity defined in the database collation or the full-text index properties applied to it. This mismatch typically arises after a database restore, attach, or upgrade from an earlier SQL Server version where collation settings were altered, or when a catalog was manually configured with conflicting accent-sensitivity flags. SQL Server detects this inconsistency during population (crawl) and halts indexing to prevent corrupted or unreliable search results.

Step-by-Step Resolution Guide

Step 1: Identify the Affected Catalog and Current Settings

  • Run the following query to identify the catalog ID referenced in the error and its current accent sensitivity:
  • SELECT fulltext_catalog_id, name, is_accent_sensitivity_on FROM sys.fulltext_catalogs;
  • Cross-reference the fulltext_catalog_id with the %d value in Event ID 9963 from SQL Server Error Logs (located at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG on Windows Server 2025/Windows 11 default installs).
  • Check the collation of the associated table/column using SELECT name, collation_name FROM sys.columns WHERE object_id = OBJECT_ID('YourTableName');

Step 2: Drop and Rebuild the Full-Text Catalog with Correct Accent Sensitivity

  • Open SQL Server Management Studio (SSMS) 2025 and connect to the instance.
  • Drop the inconsistent catalog:
  • DROP FULLTEXT CATALOG YourCatalogName;
  • Recreate it explicitly specifying the correct accent sensitivity (matching your collation requirements):
  • CREATE FULLTEXT CATALOG YourCatalogName WITH ACCENT_SENSITIVITY = ON; (or OFF, depending on your business requirement).
  • Re-associate the full-text index to the newly created catalog using CREATE FULLTEXT INDEX.

Step 3: Repopulate the Full-Text Index

  • Force a full population (crawl) to rebuild the index data under the new catalog settings:
  • ALTER FULLTEXT INDEX ON YourTableName START FULL POPULATION;
  • Monitor progress via SELECT * FROM sys.dm_fts_index_population; to ensure the status moves to “Idle” without errors.
  • If the table is large, schedule this during a maintenance window as full population is resource-intensive.

Step 4: Validate Server and Database Collation Alignment

  • Confirm the SQL Server instance collation matches expectations:
  • SELECT SERVERPROPERTY('Collation');
  • If collation mismatches persist across linked servers or replicated databases, consider standardizing collation at the database level using ALTER DATABASE YourDB COLLATE SQL_Latin1_General_CP1_CI_AS; (adjust to your required collation).

Alternative or Verification Steps

  • Verify the fix by querying sys.fulltext_catalogs again to confirm is_accent_sensitivity_on matches your intended configuration, and check the ERRORLOG for absence of further 9963 entries after the next population cycle.
  • If the error persists, run DBCC CHECKDB to rule out underlying catalog corruption, and as a last resort, uninstall/reinstall the Full-Text and Semantic Extractions for Search feature via SQL Server Installation Center on Windows Server 2025.

How to fix Error 9964 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9964 – “Failed to Finish Full-Text Operation. Filegroup Is Empty”

Why This Error Happens

This error occurs when SQL Server attempts to create or populate a full-text index on a filegroup that contains no associated data or log files, meaning the filegroup exists only as a metadata placeholder. It commonly arises after a filegroup is created but no files have been added to it yet, or when a file was manually removed/detached from the filegroup outside of normal SQL Server operations. Full-text catalogs require at least one valid, writable file within the target filegroup to store internal indexing structures, so an empty filegroup causes the operation to fail immediately.

Step-by-Step Resolution Guide

Step 1: Verify the Filegroup Status

  • Open SQL Server Management Studio (SSMS) and connect to the instance running SQL Server 2025.
  • Run the following query to check filegroup-to-file mapping:
  SELECT fg.name AS FilegroupName, f.name AS FileName, f.physical_name
  FROM sys.filegroups fg
  LEFT JOIN sys.database_files f ON fg.data_space_id = f.data_space_id
  WHERE fg.type = 'FG';
  • Identify any filegroup returning NULL for FileName — this confirms the empty filegroup causing Error 9964.

Step 2: Add a Data File to the Empty Filegroup

  • Use ALTER DATABASE to add a physical file to the affected filegroup:
  ALTER DATABASE [YourDatabaseName]
  ADD FILE (
      NAME = N'FTS_Data',
      FILENAME = N'C:\SQLData\FTS_Data.ndf',
      SIZE = 64MB,
      FILEGROWTH = 32MB
  ) TO FILEGROUP [YourFilegroupName];
  • Ensure the path C:\SQLData\ exists on the Windows Server 2025 / Windows 11 host and that the SQL Server service account has write permissions to this directory.

Step 3: Recreate or Reassign the Full-Text Catalog

  • If the catalog was already partially created, drop it first to avoid metadata conflicts:
  DROP FULLTEXT CATALOG YourCatalogName;
  • Recreate the catalog, explicitly pointing it to the now-populated filegroup:
  CREATE FULLTEXT CATALOG YourCatalogName
  ON FILEGROUP YourFilegroupName
  AS DEFAULT;

Step 4: Restart the Full-Text Population Process

  • Rebuild the full-text index on the target table:
  ALTER FULLTEXT INDEX ON YourTableName START FULL POPULATION;
  • Monitor progress via SQL Server Error Log or sys.dm_fts_index_population DMV to confirm population completes without reissuing Error 9964.

Alternative or Verification Steps

  • Re-run the filegroup/file mapping query from Step 1 to confirm every filegroup now shows at least one associated physical file before attempting any full-text operation.
  • If the error persists, check Windows Event Viewer (Application Log) for underlying I/O or permission-related errors on the .ndf file path, as disk-level access issues can mimic an “empty filegroup” condition even after files are added.

How to fix Error 9961 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9961 – “Logical Name… Getting Data”

Why This Error Happens

Error 9961 typically occurs when SQL Server 2025 encounters a mismatch between the logical name of a database file registered in system metadata and the actual physical file structure during a backup or restore operation. This is often caused by a corrupted backup header, an incomplete or interrupted backup file, or a mismatch between the database’s internal file layout (as recorded in sys.database_files) and what the backup media set actually contains. It can also surface when a backup file has been truncated, moved, or modified outside of SQL Server’s native backup/restore processes.

Step-by-Step Resolution Guide

Step 1: Verify the Logical File Names in the Backup Set

  • Open SQL Server Management Studio (SSMS) or use sqlcmd connected to your SQL Server 2025 instance.
  • Run the following command to inspect the actual logical and physical names stored in the backup file:
  RESTORE FILELISTONLY FROM DISK = 'C:\Backups\YourDatabase.bak';
  • Compare the LogicalName column output against the names referenced in your RESTORE DATABASE or RESTORE LOG statement — any discrepancy is the root cause of Error 9961.

Step 2: Correct the RESTORE Statement with Accurate MOVE Clauses

  • Rewrite your restore command using the exact logical names retrieved in Step 1, mapping them to valid physical paths on your Windows Server 2025 or Windows 11 machine.
  • Example:
  RESTORE DATABASE YourDatabase
  FROM DISK = 'C:\Backups\YourDatabase.bak'
  WITH MOVE 'YourDatabase_Data' TO 'C:\SQLData\YourDatabase.mdf',
  MOVE 'YourDatabase_Log' TO 'C:\SQLData\YourDatabase_log.ldf',
  REPLACE;
  • Ensure the target directories (C:\SQLData\) exist and that the SQL Server service account has Full Control permissions on that folder via File Explorer > Properties > Security.

Step 3: Validate Backup File Integrity

  • Run a checksum validation against the backup file to rule out corruption:
  RESTORE VERIFYONLY FROM DISK = 'C:\Backups\YourDatabase.bak' WITH CHECKSUM;
  • If this step fails, the .bak file itself is likely corrupted (due to antivirus interference, disk errors, or an interrupted file transfer) and a fresh backup copy must be sourced.

Step 4: Check for Antivirus or Windows Defender Interference

  • Open Windows Security > Virus & threat protection > Manage settings > Add or remove exclusions.
  • Add an exclusion for your SQL Server data/backup directories (e.g., C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA\ and C:\Backups\) to prevent real-time scanning from locking or altering files mid-write.

Alternative or Verification Steps

  • After applying the corrected MOVE clause and restoring successfully, confirm database accessibility by running SELECT name, state_desc FROM sys.databases WHERE name = 'YourDatabase'; — the state_desc should read ONLINE.
  • If the error persists, attempt the restore using the WITH CONTINUE_AFTER_ERROR option on a copy of the backup file, and simultaneously regenerate a brand-new full backup from the source server to rule out a permanently corrupted backup chain.

How to fix Error 9962 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9962 – Failed to Move Full-Text Catalog

Why This Error Happens

Error 9962 typically occurs when SQL Server’s service account lacks the necessary NTFS permissions on the destination folder for the full-text catalog, preventing the move operation at the OS level. It can also result from the destination path being invalid, residing on a read-only or disconnected volume, or being locked by another process (such as antivirus software or a backup job). Additionally, file system corruption or insufficient disk space on the target drive can trigger the underlying OS error referenced in the message.

Step-by-Step Resolution Guide

Step 1: Verify and Correct Folder Permissions

  • Navigate to the destination directory specified in the error message (e.g., D:\SQLData\FTCatalogs\).
  • Right-click the folder, select Properties > Security, and confirm the SQL Server service account (e.g., NT SERVICE\MSSQLSERVER) has Full Control.
  • If missing, click Edit > Add, enter the service account name, and grant Full Control permissions.
  • Apply changes and restart the SQL Server service via services.msc or Restart-Service MSSQLSERVER in PowerShell.

Step 2: Validate Destination Path and Disk Availability

  • Confirm the target path exists and is not a mapped network drive (full-text catalogs require local or supported storage paths).
  • Check available disk space using Get-PSDrive D in PowerShell to ensure the volume isn’t full.
  • Ensure the destination drive is online and not in a read-only or offline state via diskmgmt.msc.

Step 3: Exclude SQL Directories from Antivirus/Backup Locks

  • Open your antivirus console and add exclusions for the SQL Server data and full-text catalog directories (e.g., D:\SQLData\*, E:\SQLCatalogs\*).
  • Temporarily disable any third-party backup agents that may be holding file locks during the move operation.
  • Retry the ALTER FULLTEXT CATALOG ... AS FILEGROUP or ALTER FULLTEXT CATALOG ... REBUILD command after exclusions are applied.

Step 4: Run SQL Server Service with Elevated Diagnostic Logging

  • Open SQL Server Configuration Manager, right-click the SQL Server service, and ensure it’s running under an account with appropriate local admin rights for diagnostics.
  • Enable trace flag 3605 temporarily to log detailed I/O errors to the SQL Server error log: DBCC TRACEON (3605, -1).
  • Re-attempt the catalog move and review ERRORLOG located at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ for the specific Windows OS error code returned.

Alternative or Verification Steps

  • After applying permissions and retrying, verify success by running SELECT * FROM sys.fulltext_catalogs; and confirming the path column reflects the new location.
  • If the move still fails, drop and recreate the full-text catalog at the new path using CREATE FULLTEXT CATALOG followed by CREATE FULLTEXT INDEX, then repopulate it as a workaround.

How to fix Error 9960 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9960 – “View is not an indexed view” in SQL Server 2025

Why This Error Happens

This error occurs when you attempt to create a full-text index on a view that does not have a unique clustered index, which is the technical requirement for a view to be classified as an “indexed view” in SQL Server. Full-text indexing engines require a deterministic, unique key structure to track rows, and standard (non-indexed) views lack the materialized storage and unique clustered index needed to support this. Essentially, SQL Server is rejecting the request because the view is still just a virtual query definition rather than a physically materialized object with a unique identifier.

Step-by-Step Resolution Guide

Step 1: Verify the View’s Current Index Status

  • Open SQL Server Management Studio (SSMS) and connect to your SQL Server 2025 instance.
  • Run the following query to check for existing indexes on the view:
  SELECT i.name, i.type_desc, i.is_unique 
  FROM sys.indexes i 
  JOIN sys.views v ON i.object_id = v.object_id 
  WHERE v.name = 'YourViewName';
  • If this returns zero rows, the view currently has no indexes at all, confirming it is a standard view.

Step 2: Create a Unique Clustered Index on the View

  • Ensure the view was created using the WITH SCHEMABINDING option. If not, you must ALTER or DROP/CREATE the view to include it:
  ALTER VIEW dbo.YourViewName WITH SCHEMABINDING AS
  SELECT ... 
  FROM dbo.BaseTable
  • Create the required unique clustered index to materialize the view:
  CREATE UNIQUE CLUSTERED INDEX IX_YourView_Unique 
  ON dbo.YourViewName (YourUniqueColumn);
  • This step physically converts the standard view into a true “Indexed View,” satisfying the prerequisite for full-text indexing.

Step 3: Re-attempt the Full-Text Index Creation

  • Navigate to Object Explorer > Databases > Your Database > Views > YourViewName > Full-Text Index in SSMS.
  • Alternatively, run the T-SQL command directly:
  CREATE FULLTEXT INDEX ON dbo.YourViewName(YourTextColumn)
  KEY INDEX IX_YourView_Unique
  ON YourFullTextCatalog;
  • The command should now execute successfully since the view satisfies the “indexed view” requirement.

Step 4: Check Windows Server 2025 Full-Text Filter Daemon

  • Open the Services console (services.msc) on your Windows Server 2025 host.
  • Ensure the SQL Full-text Filter Daemon Launcher (MSSQLSERVER) service is running, as a stalled daemon can sometimes cause the engine to misreport index eligibility.

Alternative or Verification Steps

  • Verify the Fix: Run SELECT * FROM sys.fulltext_indexes WHERE object_id = OBJECT_ID('dbo.YourViewName'); to confirm the full-text index is now registered in the system catalog.
  • Alternative Solution: If schema binding is not feasible due to underlying table dependencies, consider creating the full-text index directly on the base table instead of the view, and use a JOIN in your queries to retrieve the search-ranked results alongside the view’s other columns.

How to fix Error 9957 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9957 — Full-Text Catalog Corruption

Why This Error Happens

Error 9957 occurs when the internal structure of a full-text catalog becomes damaged, typically due to an unexpected SQL Server shutdown, abrupt disk I/O interruption, or underlying storage/filesystem corruption. This can also happen if the full-text catalog files were moved, truncated, or modified outside of SQL Server’s control. In Windows Server 2025 and Windows 11 environments, this is frequently exacerbated by antivirus or backup software locking files tied to the full-text index during a write operation.

Step-by-Step Resolution Guide

Step 1: Verify the Scope of Corruption

  • Open SQL Server Management Studio (SSMS) and connect to the affected instance.
  • Run the following query to identify the damaged catalog:
  SELECT name, is_fulltext_enabled, data_space_id 
  FROM sys.fulltext_catalogs;
  • Check the SQL Server Error Log (via EXEC xp_readerrorlog) to confirm catalog name and associated database.

Step 2: Rebuild the Corrupted Full-Text Catalog

  • Execute a full catalog rebuild using T-SQL (replace YourCatalogName with the actual name from Step 1):
  ALTER FULLTEXT CATALOG YourCatalogName REBUILD;
  • Note: This action drops all existing full-text indexes within the catalog and recreates them, which may take time on large datasets.
  • Alternatively, right-click the catalog in SSMS under Database > Storage > Full Text Catalogs, and select Rebuild.

Step 3: Repopulate the Full-Text Index

  • Once the rebuild completes, force a full population to reindex the data:
  ALTER FULLTEXT INDEX ON YourTableName START FULL POPULATION;
  • Monitor population status using:
  SELECT * FROM sys.dm_fts_index_population;

Step 4: Check Underlying Storage Health

  • Navigate to the physical catalog folder (default path: C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData) and verify disk integrity using chkdsk /f in an elevated PowerShell/Command Prompt on Windows Server 2025.
  • Exclude the SQL Server data and FTData directories from real-time antivirus scanning to prevent file-lock conflicts during future indexing operations.

Alternative or Verification Steps

  • Verify the Fix: Run SELECT fulltext_catalog_id, name FROM sys.fulltext_catalogs WHERE is_fulltext_enabled = 1; and confirm the catalog status shows no corruption flags, then test a sample CONTAINS() query against the indexed table.
  • Alternative Fix: If the rebuild fails repeatedly, drop the full-text catalog entirely (DROP FULLTEXT CATALOG YourCatalogName) and recreate it from scratch using CREATE FULLTEXT CATALOG, then reassign indexes to the new catalog.

How to fix Error 9959 on Windows Server 2025 / Windows 11

Microsoft SQL Server 2025 Troubleshooting Guide: Error 9959

Why This Error Happens

Error 9959 occurs when the SQL Server Full-Text Filter Daemon Launcher (MSSQLFDLauncher) service or the full-text engine fails to properly allocate or initialize its memory manager component during startup. This is typically caused by the Full-Text service being disabled, stopped, or running under an account with insufficient permissions to access shared memory resources. It can also result from corrupted full-text catalog files or a mismatch between the SQL Server instance and the installed Full-Text Search feature components after an update to Windows Server 2025 or Windows 11.

Step-by-Step Resolution Guide

Step 1: Verify the Full-Text Filter Daemon Launcher Service Status

  • Open Services.msc (Windows Server 2025 / Windows 11) and locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER).
  • Confirm the Startup Type is set to Automatic and the service status is Running.
  • If stopped, right-click and select Start, then monitor the SQL Server Error Log for recurrence of Error 9959.

Step 2: Check and Repair Service Account Permissions

  • Open SQL Server Configuration Manager and navigate to the SQL Server Services node.
  • Right-click SQL Full-text Filter Daemon Launcher and select Properties > Log On tab.
  • Ensure the account used has local security rights (specifically “Log on as a service” under secpol.msc > Local Policies > User Rights Assignment).
  • Restart the service after confirming permissions: net stop MSSQLFDLauncher && net start MSSQLFDLauncher.

Step 3: Rebuild the Full-Text Catalog

  • Open SQL Server Management Studio (SSMS) and connect to the affected instance.
  • Run the following T-SQL command to force a rebuild of the catalog associated with the failing database:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • If the catalog path is corrupted, verify the physical directory exists under C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\.

Step 4: Validate Feature Installation via Setup

  • Launch the SQL Server 2025 Installation Center from the installation media or Setup.exe.
  • Select Repair for the instance exhibiting the error to ensure the Full-Text and Semantic Extractions for Search feature files are not missing or mismatched.
  • Reboot the Windows Server 2025 host following the repair installation to clear locked memory handles.

Alternative or Verification Steps

  • Verification: Execute SELECT fulltextserviceproperty('IsFulltextInstalled'); in SSMS; a return value of 1 confirms the memory manager and service are correctly initialized.
  • Alternative: If the error persists after a repair, completely uninstall and reinstall the Full-Text and Semantic Extractions for Search component via “Add or Remove Programs” rather than relying on the Setup repair utility.

How to fix Error 9956 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9956 – Full-Text Filter Daemon Logon Failure

Why This Error Happens

This error occurs when the SQL Server Full-Text Filter Daemon Host (MSSQLFDLauncher) service cannot authenticate the account configured to run it, typically because the password has expired, the account has been locked or disabled in Active Directory, or the account lacks the “Log on as a service” right. It can also occur after a domain password reset was not synchronized with the Windows Service Control Manager, leaving cached credentials invalid. In some cases, the account itself may have been deleted or its SID is no longer resolvable due to domain trust issues.

Step-by-Step Resolution Guide

Step 1: Verify the Full-Text Filter Daemon Account Status

  • Open Active Directory Users and Computers (or local Computer Management if using a local account) and confirm the account referenced in the error (%ls) is not locked, disabled, or expired.
  • Check “Account is locked out” and “Password never expires” checkboxes if domain policy requires it.
  • Run net user <accountname> /domain from an elevated Command Prompt to inspect account flags.

Step 2: Reset Credentials via SQL Server Configuration Manager

  • Launch SQL Server Configuration Manager on Windows Server 2025 / Windows 11.
  • Navigate to SQL Server Services, right-click SQL Full-text Filter Daemon Launcher (MSSQLSERVER), and select Properties.
  • Under the Log On tab, re-enter the correct username and password, ensuring the format is DOMAIN\username for domain accounts or .\username for local accounts.
  • Click Apply, then restart the service to force Configuration Manager to update the stored credentials via LSA secrets rather than editing them directly through services.msc.

Step 3: Grant “Log On as a Service” Rights

  • Open Local Security Policy (secpol.msc) or the appropriate Group Policy Object for domain-joined servers.
  • Navigate to Local Policies > User Rights Assignment > Log on as a service.
  • Add the Full-Text Daemon account explicitly if it is missing, then run gpupdate /force to apply the policy immediately.

Step 4: Restart Dependent SQL Services in Correct Order

  • Restart the SQL Server (MSSQLSERVER) service first, followed by SQL Full-text Filter Daemon Launcher.
  • Use PowerShell for a clean restart sequence:
Restart-Service -Name 'MSSQLSERVER' -Force
Restart-Service -Name 'MSSQLFDLauncher' -Force
  • Confirm no other process is holding a lock on the full-text catalog files in the default data directory (e.g., C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA).

Alternative or Verification Steps

  • After restarting, check the SQL Server Error Log or Windows Event Viewer (Application log) for Event ID 9956 recurrence; successful resolution shows the Full-Text Daemon starting without error.
  • As an alternative, run ALTER FULLTEXT CATALOG <catalog_name> REBUILD; in SQL Server Management Studio to confirm indexing functionality is restored after the service comes online.

How to fix Error 9955 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9955 – Named Pipe Creation Failure for Full-Text Filter Daemon

Why This Error Happens

This error occurs when SQL Server’s Full-Text Filter Daemon Launcher (MSSQLFDLauncher) service cannot establish a named pipe for inter-process communication, usually because a stale or orphaned pipe handle already exists from a previous crashed or improperly terminated daemon host process (FDHost.exe). It can also result from insufficient permissions on the service account, conflicts between multiple SQL Server instances attempting to use the same pipe name, or corrupted Full-Text component registrations. In some cases, security software or endpoint protection tools interfere with named pipe creation, blocking the handshake between the SQL Server engine and the filter daemon.

Step-by-Step Resolution Guide

Step 1: Restart the Full-Text Filter Daemon Launcher Service

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLFDLauncher) for your instance name.
  • Right-click and select Stop, wait 10 seconds, then Start again.
  • Alternatively, run in an elevated PowerShell/Command Prompt:
  net stop MSSQLFDLauncher$<InstanceName>
  net start MSSQLFDLauncher$<InstanceName>

Step 2: Kill Orphaned FDHost Processes

  • Open Task Manager or use PowerShell to check for lingering fdhost.exe processes.
  • Run the following command to forcibly terminate any stuck instances:
  taskkill /F /IM fdhost.exe
  • Confirm no residual named pipe handles remain using Sysinternals Process Explorer (search for \\.\pipe\sql\query or similar FD-related pipes).

Step 3: Verify Service Account Permissions

  • Open SQL Server Configuration Manager.
  • Check the account running MSSQLFDLauncher and ensure it matches the SQL Server Database Engine service account.
  • Confirm the account has “Create global objects” and “Impersonate a client after authentication” rights via secpol.msc → Local Policies → User Rights Assignment.
  • Apply changes and restart both the SQL Server service and the Full-Text Filter Daemon Launcher service.

Step 4: Rebuild the Full-Text Catalog

  • If the error persists after service restarts, the catalog metadata may be corrupted.
  • Run the following T-SQL to rebuild the affected catalog:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Monitor SQL Server Error Log for confirmation that the rebuild completed without re-triggering Error 9955.

Step 5: Check for Antivirus or EDR Interference

  • Temporarily disable real-time protection or add exclusions for sqlservr.exe, fdhost.exe, and fdlauncher.exe in your endpoint protection software.
  • Whitelist the SQL Server installation directory (typically C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn\).
  • Restart the Full-Text services and retest the indexing operation.

Alternative or Verification Steps

  • To verify the fix, run a test full-text query (SELECT * FROM table WHERE CONTAINS(column, 'test')) and confirm no Error 9955 appears in the SQL Server Error Log or Windows Event Viewer.
  • If the issue persists, use sc query to confirm the Full-Text Daemon Launcher service is running as expected, or consider performing a repair installation of the SQL Server Full-Text Search feature via the SQL Server Installation Center.

How to fix Error 9954 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9954 – Full-Text Filter Daemon Launch Failure

Why This Error Happens

This error typically occurs because the SQL Full-text Filter Daemon Launcher (MSSQLFDLauncher) service is stopped, disabled, or failing to start due to insufficient permissions on its service account. It can also be triggered by a corrupted Full-Text component installation, a blocked named pipe communication channel between the SQL Server Database Engine and the daemon host process (fdhost.exe), or security software (antivirus/EDR) intercepting the inter-process communication. In some cases, mismatched service dependencies after a Windows Server 2025 update can prevent the launcher from initializing correctly.

Step-by-Step Resolution Guide

Step 1: Verify the Filter Daemon Launcher Service Status

  • Open Services.msc (Run as Administrator) on the Windows Server 2025 / Windows 11 machine.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER) (or the named instance equivalent).
  • Ensure the Startup Type is set to Automatic and the service status is Running.
  • If stopped, right-click and select Start, then check the SQL Server Error Log for recurrence of Error 9954.

Step 2: Check and Reset the Service Account Permissions

  • Right-click the MSSQLFDLauncher service, go to Properties > Log On tab.
  • Confirm the account used has local “Log on as a service” rights via secpol.msc > Local Policies > User Rights Assignment.
  • Reset the service account password using SQL Server Configuration Manager (do not change it directly via Services.msc) to ensure the SCM (Service Control Manager) credentials sync correctly.
  • Restart both the SQL Server service and the Filter Daemon Launcher service after the change.

Step 3: Repair the Full-Text Search Component

  • Open Control Panel > Programs > Programs and Features.
  • Select Microsoft SQL Server 2025, click Uninstall/Change, then choose Repair.
  • Follow the wizard to let the Setup utility scan and repair the Full-Text Search feature files located typically in C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn\FTData.
  • Reboot the server once the repair installation completes.

Step 4: Check Firewall and Antivirus Exclusions

  • Navigate to Windows Defender Firewall with Advanced Security.
  • Ensure fdhost.exe and fdlauncher.exe (located in the Binn folder) are not being blocked for local loopback communication.
  • Add exclusions for these two executables in any third-party Antivirus or EDR software to prevent the processes from being terminated upon launch.

Alternative or Verification Steps

  • Verify the fix: Run a test query using CONTAINS() or FREETEXT() against a table with a full-text index; if the query executes without Error 9954 in the SQL Server Error Log, the daemon communication is restored.
  • Alternative method: If the issue persists, drop and recreate the Full-Text Catalog via DROP FULLTEXT CATALOG [CatalogName]; followed by a fresh CREATE FULLTEXT CATALOG command to rule out catalog-level corruption.

How to fix Error 9953 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9953 — Invalid Directory Attributes

Why This Error Happens

Error 9953 occurs when SQL Server attempts to use a directory (typically for a Memory-Optimized Filegroup, FILESTREAM container, or database file path) that does not meet the required filesystem criteria. SQL Server mandates that the target path be an actual directory — not a file — and that it not carry the “Hidden” attribute, as the Database Engine cannot reliably enumerate or manage hidden folders during container validation. This commonly happens after manually creating the folder with inherited hidden attributes, restoring from a compressed/zipped source, or pointing to a path that was previously used for a system file.

Step-by-Step Resolution Guide

Step 1: Verify the Path Exists and Is a True Directory

  • Open File Explorer or PowerShell and navigate to the exact path referenced in the error message (e.g., D:\SQLData\XTP_Filegroup).
  • Confirm the target is a folder and not a file with a similar name (e.g., a .txt or no-extension file masquerading as a directory).
  • Run Get-Item -Path "D:\SQLData\XTP_Filegroup" | Select-Object Mode, Attributes in PowerShell to inspect its properties.

Step 2: Remove the Hidden Attribute

  • Right-click the folder, select Properties, and under the General tab, uncheck Hidden if it is checked.
  • Alternatively, use the command line for a guaranteed fix: attrib -h -s "D:\SQLData\XTP_Filegroup".
  • If using PowerShell, run: (Get-Item "D:\SQLData\XTP_Filegroup" -Force).Attributes = 'Directory' to reset attributes to the default, non-hidden state.

Step 3: Check Parent Directory Attributes

  • SQL Server’s validation can fail even if only a parent folder in the path is hidden.
  • Navigate up the directory tree (e.g., D:\SQLData\) and repeat the attrib -h -s command on every folder level leading up to the target directory.
  • Use Get-ChildItem -Path "D:\SQLData" -Recurse -Force | Where-Object { $_.Attributes -match "Hidden" } to quickly identify any hidden folders in the chain.

Step 4: Recreate the Directory if Attributes Persist

  • If the hidden attribute re-applies itself (often due to Group Policy, antivirus software, or a faulty sync client like OneDrive), delete the folder and create a fresh one manually via mkdir D:\SQLData\XTP_Filegroup_New.
  • Update your CREATE DATABASE or ALTER DATABASE ADD FILEGROUP T-SQL statement to point to this newly created, clean path.
  • Ensure the new folder is not located inside a OneDrive, Dropbox, or other cloud-sync folder structure, as these services frequently alter file attributes.

Step 5: Validate SQL Server Service Account Permissions

  • Confirm the SQL Server service account (e.g., NT Service\MSSQLSERVER) has Full Control (Modify, Read, Write, List Folder Contents) permissions on the directory.
  • Go to Properties > Security > Edit, add the service account if missing, and grant the appropriate permissions.
  • Restart the SQL Server service via services.msc or Restart-Service -Name 'MSSQLSERVER' to ensure permission changes take effect.

Alternative or Verification Steps

  • Re-run the original T-SQL command (e.g., ALTER DATABASE ... ADD FILEGROUP ... CONTAINS MEMORY_OPTIMIZED_DATA) and confirm it completes without Error 9953.
  • If the issue persists, check Windows Event Viewer under Applications and Services Logs > MSSQLSERVER for correlating I/O or access-denied errors that might indicate a deeper permissions or antivirus-lock conflict rather than a simple attribute issue.

How to fix Error 9952 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9952 – Full-Text Auto Change Tracking Disabled

Why This Error Happens

Error 9952 is an informational message indicating that SQL Server has automatically turned off change tracking for a specific table or indexed view within a full-text catalog. This typically occurs when the underlying table lacks a valid unique key column required for incremental tracking, or when the change tracking mechanism encounters a conflict during a schema modification (such as an ALTER TABLE operation) while a population is in progress. It can also surface if the full-text catalog’s internal tracking tables become corrupted or if disk I/O errors interrupt the tracking process on Windows Server 2025 file systems.

Step-by-Step Resolution Guide

Step 1: Verify the Unique Key Requirement

  • Confirm the table or indexed view referenced in the error has a single-column, non-nullable unique index.
  • Run the following query to check existing indexes:
  EXEC sp_help 'YourTableName';
  • If no valid unique index exists, create one before re-enabling tracking.

Step 2: Manually Re-enable Change Tracking

  • Open SQL Server Management Studio (SSMS) and connect to your Windows Server 2025 instance.
  • Execute the following T-SQL command to force the setting back to automatic:
  ALTER FULLTEXT INDEX ON YourTableName SET CHANGE_TRACKING AUTO;
  • Ensure no active transactions are locking the table during this operation.

Step 3: Rebuild the Full-Text Catalog

  • If re-enabling tracking does not resolve the issue, the catalog metadata may be corrupted.
  • Navigate to Object Explorer in SSMS, right-click the specific Full-Text Catalog, and select Rebuild.
  • Alternatively, run the T-SQL equivalent:
  ALTER FULLTEXT CATALOG YourCatalogName REBUILD;

Step 4: Check SQL Server Error Logs for I/O Conflicts

  • Navigate to the default log path: C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\
  • Look for concurrent Event ID entries regarding disk latency or Windows Server 2025 storage driver issues.
  • If I/O errors are present, run CHKDSK on the volume hosting the .mdf and .ndf files.

Alternative or Verification Steps

  • Verify the Fix: Run SELECT * FROM sys.fulltext_indexes WHERE change_tracking_state_desc = 'AUTO'; to confirm the table now shows “AUTO” status instead of “MANUAL” or “OFF”.
  • Alternative Solution: If the error persists after a rebuild, perform a full Repopulation of the index via ALTER FULLTEXT INDEX ON YourTableName START FULL POPULATION; to force a clean resync of the tracking data.

How to fix Error 9951 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9951 — Database Cannot Be Modified During Detach (Read-Only)

Why This Error Happens

This error occurs when SQL Server attempts to update internal metadata or finish a detach operation on a database that has its READ_ONLY property enabled, preventing any write operations to the database structure. It commonly surfaces when the database was set to read-only (either manually, via Always On readable secondary configuration, or due to a filegroup/file system restriction) and a detach, shrink, or metadata-cleanup step requires write access to complete. Additionally, corrupted or missing primary data files can cause SQL Server to mount the database in an emergency read-only state, triggering this same conflict during detach.

Step-by-Step Resolution Guide

Step 1: Verify the Current Database State

  • Open SQL Server Management Studio (SSMS) or a query window and run:
  SELECT name, state_desc, is_read_only FROM sys.databases WHERE name = 'YourDatabaseName';
  • Confirm whether is_read_only returns 1 and check state_desc for ONLINE, RESTORING, or SUSPECT.
  • If the state is SUSPECT or EMERGENCY, the read-only flag may be a side effect of corruption, not a manual setting.

Step 2: Change the Database to Read-Write Mode

  • Ensure no active connections are using the database by setting it to single-user mode first:
  ALTER DATABASE YourDatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
  • Switch the database from read-only to read-write:
  ALTER DATABASE YourDatabaseName SET READ_WRITE;
  • Restore multi-user access once the change is confirmed:
  ALTER DATABASE YourDatabaseName SET MULTI_USER;

Step 3: Check File System and Volume Permissions

  • Navigate to the data file location (commonly C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA\) and confirm the .mdf and .ldf files are not marked Read-only in file properties.
  • Verify the SQL Server service account has Modify/Write permissions on the folder via Properties > Security tab.
  • On Windows Server 2025, check if the volume itself is mounted as read-only (common with Storage Spaces Direct or ReFS snapshots) using:
  Get-Volume | Select-Object DriveLetter, FileSystem, OperationalStatus

Step 4: Retry the Detach Operation

  • Once the database is confirmed READ_WRITE, re-attempt the detach:
  EXEC sp_detach_db 'YourDatabaseName', 'true';
  • If the error persists, close any open SSMS Object Explorer connections pointing to that database, as lingering sessions can re-lock the read-only context.

Step 5: Repair Corrupted Files (If Applicable)

  • If Step 1 revealed a SUSPECT or EMERGENCY state due to corruption, run a consistency check first:
  DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
  • Address any integrity errors with REPAIR_REBUILD before attempting the detach again, since detaching a physically damaged file won’t resolve the underlying issue.

Alternative or Verification Steps

  • After completing the steps, re-run SELECT is_read_only FROM sys.databases WHERE name = 'YourDatabaseName'; — a result of 0 confirms the database is writable and ready for detach.
  • If ALTER DATABASE commands hang or time out, use SQL Server Configuration Manager to restart the SQL Server service, then retry Step 2, as a stuck session lock may be preventing the state change.

How to fix Error 9950 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9950 – Full-Text Catalog Corruption in SQL Server 2025

Why This Error Happens

Error 9950 occurs when the Full-Text Catalog health monitor detects internal inconsistencies within the catalog’s underlying files, typically caused by abrupt service termination, storage-level corruption, or disk I/O errors during an active population (crawl). This can also happen if the catalog files were moved, truncated, or modified outside of SQL Server’s control while the Full-Text Filter Daemon Host (MSSQLFDLauncher) process had an active handle on them. Once corruption is detected, SQL Server automatically halts all in-progress populations to prevent further index damage, requiring a manual rebuild to restore functionality.

Step-by-Step Resolution Guide

Step 1: Verify the Scope of Corruption

  • Check the SQL Server Error Log and Windows Event Viewer (Application Log) for the full text of Error 9950, noting the specific catalog ID and database name referenced.
  • Run the following query to identify the health status of all full-text catalogs on the instance:
  SELECT name, is_fulltext_enabled 
  FROM sys.databases 
  WHERE name = 'YourDatabaseName';

  SELECT * FROM sys.fulltext_catalogs;
  • Confirm whether the underlying storage volume (SSD/SAN) has reported any hardware errors via Windows Server 2025 Storage Spaces diagnostics.

Step 2: Rebuild the Corrupted Full-Text Catalog

  • Open SQL Server Management Studio (SSMS) 21 or a new query window connected to the affected instance.
  • Execute the rebuild command specific to the corrupted catalog identified in Step 1:
  USE [YourDatabaseName];
  GO
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  GO
  • Note that this action drops and recreates the catalog, meaning all indexes associated with it will need to be fully repopulated.

Step 3: Repopulate the Full-Text Index

  • Once the rebuild command completes successfully, trigger a full population for every table associated with the catalog.
  • Use the following syntax for each affected table:
  ALTER FULLTEXT INDEX ON dbo.YourTableName START FULL POPULATION;
  GO
  • Monitor the sys.dm_fts_index_population dynamic management view to track the progress and ensure the status reaches “Idle” without new errors.

Step 4: Restart the Filter Daemon Host Service

  • If the rebuild command hangs or fails to initiate, restart the search service via Windows Services Manager (services.msc) on Windows Server 2025.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER) and perform a manual restart to clear any stuck memory threads.
  • Re-attempt the REBUILD command from Step 2 immediately after the service returns to a “Running” state.

Alternative or Verification Steps

  • Verify the Fix: Query sys.fulltext_catalogs and sys.dm_fts_index_population immediately after the full population finishes; a healthy status will show no active crawl errors and a populate_status of 0 (Idle).
  • Alternative Solution: If the rebuild repeatedly fails due to disk-level I/O errors, move the full-text catalog to a different, healthy storage volume using ALTER FULLTEXT CATALOG [YourCatalogName] REORGANIZE; prior to rebuilding, or restore the specific filegroup from the last known good backup if physical corruption is confirmed via DBCC CHECKDB.

How to fix Error 9949 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9949 – Full-Text Population Paused

Why This Error Happens

Error 9949 occurs when SQL Server’s Full-Text Engine pauses active population (crawl) operations on a catalog, typically because the underlying filesystem path for the catalog has become inaccessible, disk space has been exhausted, or the SQL Server Launchpad/Filter Daemon Host service has crashed or lost its security token. In most cases on Windows Server 2025, this is triggered by low disk I/O availability, a corrupted full-text catalog directory, or the MSSQLFDLauncher service account lacking the necessary permissions to write to the catalog folder. Less frequently, it is caused by a resource governor memory pressure event or an unexpected termination of the fdhost.exe process.

Step-by-Step Resolution Guide

Step 1: Verify Disk Space and Catalog Path Health

  • Check the volume hosting your full-text catalog (usually under C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData) for available free space; Full-Text requires headroom for temporary index merge files.
  • Run sp_help_fulltext_catalogs 'catalog_name' in SSMS to confirm the PATH status is not reporting “OFFLINE” or “INVALID.”
  • Remove any read-only flags or inherited Deny permissions on the FTData folder via icacls "C:\...\FTData" /grant "NT SERVICE\MSSQLFDLauncher$MSSQLSERVER":(OI)(CI)F.

Step 2: Restart the Full-Text Filter Daemon Host Service

  • Open services.msc on Windows Server 2025 and locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER).
  • Restart the service rather than just the SQL Server engine, as fdhost.exe often hangs independently without crashing the parent sqlservr.exe process.
  • If the service fails to restart, check the Windows Event Viewer under Applications and Services Logs > MSSQLSERVER for a corresponding Launchpad timeout error.

Step 3: Rebuild the Full-Text Catalog

  • If pausing persists after a service restart, the catalog file itself may be logically corrupted (common after an unclean shutdown).
  • Execute ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD WITH ACCENT_SENSITIVITY = ON; via a T-SQL query window.
  • Note that this is an offline operation for that specific catalog and will require a full repopulation, so schedule this during a maintenance window for large tables.

Step 4: Resume the Index Population Manually

  • Once the service is confirmed running and the path is validated, manually trigger the crawl.
  • Run ALTER FULLTEXT INDEX ON [dbo.YourTable] RESUME POPULATION; to force the engine to acknowledge the fixed resource and restart the crawl queue.

Alternative or Verification Steps

  • Verify the Fix: Query the DMV sys.dm_fts_index_population immediately after resuming; the status_description column should transition from “Paused” to “In progress” or “Idle” within a few seconds.
  • Alternative Solution: If the catalog remains stuck in a paused state due to a corrupted Filter Daemon Host registration, unregister and re-register the iFilters using regsvr32 for the specific document type filters (e.g., PDF or Office filters) that were being indexed when the pause occurred.

How to fix Error 9948 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9948 – Full-Text Catalog Path Exceeds Length Limit

Why This Error Happens

This error occurs when the full-text catalog path specified during catalog creation or attachment exceeds the Windows/SQL Server maximum path length limit (typically 260 characters unless long path support is enabled). It commonly happens when databases are moved to deeply nested folder structures, or when automated scripts generate catalog paths using long database names, instance names, or timestamped subdirectories. SQL Server validates this path length internally and refuses to create or mount the catalog if the resolved full path string surpasses the allowed limit.

Step-by-Step Resolution Guide

Step 1: Identify the Full Resolved Path Length

  • Run the following query to locate the current full-text catalog path configuration:
SELECT name, data_space_id, is_default, path 
FROM sys.fulltext_catalogs;
  • Manually concatenate the root data path, folder hierarchy, and catalog name to calculate total character count.
  • Confirm if the path exceeds 260 characters (standard limit) by counting the string length.

Step 2: Shorten the Catalog Directory Structure

  • Move the SQL Server data root or default full-text catalog directory closer to the drive root, e.g., change from C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\VeryLongSubfolderName\ to D:\FTData\.
  • Rename the catalog itself to a shorter identifier when creating it:
CREATE FULLTEXT CATALOG ShortCatName 
ON FILEGROUP [PRIMARY] 
IN PATH 'D:\FTData';
  • Avoid using long database names or GUIDs as part of custom catalog path strings in automation scripts.

Step 3: Enable Long Path Support in Windows (If Applicable)

  • Open Local Group Policy Editor (gpedit.msc) on Windows Server 2025 or Windows 11.
  • Navigate to Computer Configuration > Administrative Templates > System > Filesystem.
  • Enable the policy named Enable Win32 long paths.
  • Alternatively, set the registry key via PowerShell (run as Administrator):
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1
  • Restart the SQL Server service for the registry change to take effect.

Step 4: Recreate or Reattach the Full-Text Catalog

  • Drop the invalid catalog reference if it exists in a broken state:
DROP FULLTEXT CATALOG [OldCatalogName];
  • Recreate the catalog using the newly shortened path validated in Step 1 and Step 2.
  • Rebuild any full-text indexes associated with the catalog:
ALTER FULLTEXT INDEX ON dbo.YourTable START FULL POPULATION;

Alternative or Verification Steps

  • Verify the fix by querying sys.fulltext_catalogs again and confirming the path column returns a valid, accessible directory without triggering Error 9948 on the next index rebuild.
  • If the error persists despite long path support being enabled, move the entire SQL Server instance data directory to a top-level folder (e.g., E:\SQLData\) via SQL Server Configuration Manager to permanently reduce baseline path length.

How to fix Error 9947 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9947 – Full-Text Catalog Identity Mismatch

Why This Error Happens

Error 9947 occurs when SQL Server 2025 attempts to attach a database and detects that the full-text catalog files on disk carry an internal identity (GUID) that does not match the identity recorded in the database metadata. This typically happens when a database is restored or copied from another instance without properly moving the associated full-text catalog folder, or when the catalog files become orphaned due to a mismatched attach/detach operation. Corruption of the catalog’s metadata file, manual renaming of catalog directories, or attaching a database to a different SQL Server instance than the one that originally created the catalog can also trigger this mismatch.

Step-by-Step Resolution Guide

Step 1: Detach the Database Cleanly

  • Open SQL Server Management Studio (SSMS) and connect to your Windows Server 2025 instance.
  • Run EXEC sp_detach_db 'YourDatabaseName'; to safely detach the database before making file changes.
  • Ensure no active connections are using the database by running ALTER DATABASE YourDatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE; beforehand.

Step 2: Verify and Relocate the Full-Text Catalog Files

  • Navigate to the default data directory, typically C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA\.
  • Confirm the full-text catalog folder (often named with a GUID, e.g., FTData\sql_ft_catalog_<GUID>) exists and matches the path referenced during attach.
  • If the folder was moved or renamed, restore it to its original path or update the attach script to reference the correct location.

Step 3: Re-attach the Database Without the Corrupted Catalog

  • Use CREATE DATABASE YourDatabaseName ON (FILENAME = 'C:\...\YourDatabaseName.mdf') FOR ATTACH; while excluding the full-text catalog file reference if it continues to fail.
  • If the attach succeeds without full-text catalog, proceed to rebuild it manually in Step 4.

Step 4: Rebuild the Full-Text Catalog from Scratch

  • Drop the broken catalog reference: DROP FULLTEXT CATALOG ft_catalog_name; (run this against the newly attached database).
  • Recreate it using CREATE FULLTEXT CATALOG ft_catalog_name AS DEFAULT;
  • Re-associate the full-text index: CREATE FULLTEXT INDEX ON YourTable(YourColumn) KEY INDEX PK_YourTable ON ft_catalog_name;

Step 5: Run Full Population to Restore Indexing

  • Execute ALTER FULLTEXT INDEX ON YourTable START FULL POPULATION; to rebuild the index data.
  • Monitor progress via SELECT * FROM sys.dm_fts_index_population; until the population status shows as idle (completed).

Alternative or Verification Steps

  • Verify the fix by querying SELECT * FROM sys.fulltext_catalogs; and confirming the catalog is listed as “ONLINE” with no error flags.
  • If rebuilding fails repeatedly, restore the database from a known-good backup that includes a consistent full-text catalog, rather than attempting a manual attach of mismatched files.

How to fix Error 9946 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9946 – Full-Text Catalog Mount Failure in SQL Server 2025

Why This Error Happens

Error 9946 typically occurs when SQL Server 2025 attempts to attach a database but cannot locate or access the physical files associated with a full-text catalog. This is most commonly caused by corrupted or missing catalog files, incorrect NTFS permissions on the data directory for the SQL Server service account, or the catalog folder being moved/deleted outside of SQL Server’s awareness. In some cases, this also occurs after an in-place upgrade from an older SQL Server version where full-text catalog file formats are incompatible with the new engine.

Step-by-Step Resolution Guide

Step 1: Verify File System Permissions

  • Navigate to the full-text catalog directory, typically found under C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA\.
  • Right-click the folder, go to Properties > Security, and confirm the SQL Server service account (e.g., NT Service\MSSQLSERVER) has Full Control.
  • If permissions are missing, click Edit, add the service account, and grant Modify/Full Control rights.
  • Restart the SQL Server service via services.msc or run net stop MSSQLSERVER && net start MSSQLSERVER in an elevated Command Prompt.

Step 2: Check for Missing or Corrupted Catalog Files

  • Open SQL Server Management Studio (SSMS) and run EXEC sp_help_fulltext_catalogs; to list expected catalog paths.
  • Compare the output paths against what physically exists in File Explorer or via PowerShell: Get-ChildItem "C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA\" -Filter "*.cat".
  • If files are missing, this indicates the catalog needs to be rebuilt rather than mounted from disk.

Step 3: Detach and Reattach the Database

  • Run EXEC sp_detach_db 'YourDatabaseName'; in SSMS to cleanly detach the database.
  • Verify no orphaned .ldf or catalog folder locks exist using Resource Monitor (resmon.exe) under the CPU tab’s “Associated Handles” search.
  • Reattach the database using CREATE DATABASE YourDatabaseName ON (FILENAME = 'C:\...\YourDatabase.mdf') FOR ATTACH;.

Step 4: Rebuild the Full-Text Catalog

  • If reattaching does not resolve the warning, drop the broken catalog reference using DROP FULLTEXT CATALOG YourCatalogName;.
  • Recreate it with CREATE FULLTEXT CATALOG YourCatalogName IN PATH 'C:\...\DATA' AS DEFAULT;.
  • Re-populate the index by running ALTER FULLTEXT INDEX ON YourTable START FULL POPULATION;.

Alternative or Verification Steps

  • To verify the fix, query SELECT * FROM sys.fulltext_catalogs; and confirm the is_importing column shows 0 and no error flags are present.
  • If the issue persists after a Windows Server 2025 update, use the built-in SQL Server consistency checker by running DBCC CHECKDB('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS; to rule out underlying database corruption as the root cause.

How to fix Error 9945 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9945 – “All Full-Text Populations in Progress”

Why This Error Happens

Error 9945 occurs when SQL Server’s Full-Text Engine rejects a new population (crawl) request because the maximum number of concurrent full-text population threads are already active on the instance. This typically happens on systems with multiple full-text indexed tables that are all triggered simultaneously, such as during a large data import, replication sync, or scheduled batch job. It can also surface if a previous population became “stuck” due to a corrupted full-text catalog or an orphaned background thread that never released its population slot.

Step-by-Step Resolution Guide

Step 1: Identify Active and Stuck Populations

  • Run the following query to check current population status:
SELECT table_id, OBJECT_NAME(table_id) AS TableName, population_status 
FROM sys.dm_fts_index_population;
  • Look for rows where population_status remains at 1 (initializing) or 2 (active crawl) for an unusually long time.
  • Cross-reference with SQL Server Error Log and Event Viewer (Windows Logs > Application) for repeated Event ID 9945 entries.

Step 2: Throttle or Serialize Full-Text Population Requests

  • Avoid triggering ALTER FULLTEXT INDEX ... START FULL POPULATION on multiple tables simultaneously.
  • Use a sequential job step in SQL Server Agent so each population completes before the next starts.
  • Check and adjust the max full-text crawl range configuration if your workload requires higher throughput:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max full-text crawl range';

Step 3: Restart the Full-Text Filter Daemon Host Service

  • On Windows Server 2025 / Windows 11, open Services.msc.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER) (or named instance equivalent).
  • Right-click and select Restart to clear any orphaned population threads.
  • Alternatively, restart via PowerShell:
Restart-Service -Name "MSSQLFDLauncher"

Step 4: Rebuild the Full-Text Catalog if Corruption Is Suspected

  • Navigate to SQL Server Management Studio (SSMS) and expand the affected database.
  • Under Storage > Full Text Catalogs, right-click the catalog and select Rebuild.
  • Or run via T-SQL:
ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;

Alternative or Verification Steps

  • Re-run the query from Step 1 after 5–10 minutes; confirm population_status returns to 0 (idle) for all tables.
  • If the error persists, check disk I/O performance on the volume hosting the full-text catalog files (%ProgramFiles%\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData), as slow storage can cause populations to queue indefinitely and trigger repeated 9945 errors.

How to fix Error 9944 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9944 — Full-Text Retry Pass Completed

Why This Error Happens

Error 9944 is an informational message, not a critical failure. It indicates that the Full-Text Search engine encountered a transient issue (such as a locked resource, a timeout, or a momentary conflict with the indexed table/view) during the initial population pass and successfully completed the indexing process on a subsequent retry attempt. This typically happens when there is heavy concurrent write activity on the base table while the full-text crawl is running, or when the Filter Daemon Host (MSSQLFDLauncher) process experiences a brief resource contention.

Step-by-Step Resolution Guide

Step 1: Verify the Full-Text Catalog Status

  • Open SQL Server Management Studio (SSMS) and connect to your Windows Server 2025 instance.
  • Run the following query to check the population status: SELECT * FROM sys.dm_fts_index_population;
  • Confirm that the status_description shows “Idle” or “Completed,” indicating the retry was successful and no further action is strictly required.

Step 2: Review Concurrent Workloads and Locking

  • Check the SQL Server Error Log (C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG) for timestamps surrounding the 9944 event to identify concurrent blocking transactions.
  • Use sp_whoisactive or the Activity Monitor to identify long-running transactions that may be locking the table during the crawl window.
  • Schedule full population crawls during off-peak hours if write-heavy workloads are consistently triggering retries.

Step 3: Restart the Full-Text Filter Daemon Host Service

  • Open Services.msc on your Windows Server 2025/Windows 11 machine.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER).
  • Right-click and select Restart to clear any stuck filter host processes that may be causing repeated retry passes.
  • Ensure the service account running this service has db_owner or appropriate read permissions on the target database.

Step 4: Rebuild the Full-Text Catalog (If Retries Persist)

  • Navigate to Object Explorer > Databases > [Your Database] > Storage > Full Text Catalogs.
  • Right-click the specific catalog associated with the table ID mentioned in the error message.
  • Select Rebuild to force a clean, full repopulation rather than relying on incremental retry logic.
  • Alternatively, run: ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;

Alternative or Verification Steps

  • Verify: Query sys.fulltext_indexes and check the crawl_end_date column to ensure the population finished without a subsequent “failed” status following the retry.
  • Alternative: If retries continue to occur frequently, increase the max_fulltext_connections sp_configure setting slightly to give the Filter Daemon Host more resource headroom during crawls.

How to fix Error 9943 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9943 – Full-Text Population Completed Message

Why This Error Happens

Error 9943 is not actually an error; it is an informational message logged by SQL Server’s Full-Text Search engine to indicate that a population (crawl) of a full-text index has finished successfully. It typically appears in the SQL Server Error Log because the logging verbosity level for full-text operations is set to capture informational events, not because something is broken. Administrators often flag it as a concern simply because it gets routed to the same log as genuine warnings and errors, causing confusion during log audits.

Step-by-Step Resolution Guide

Step 1: Confirm the Message Is Informational, Not a Failure

  • Open SQL Server Management Studio (SSMS) and connect to your SQL Server 2025 instance.
  • Navigate to Management > SQL Server Logs and locate the Error 9943 entry.
  • Verify the full text reads “Informational: Full-text population completed…” — this confirms it is a status update, not a failure condition.

Step 2: Adjust Full-Text Logging Verbosity (If Logs Are Too Noisy)

  • Run the following T-SQL command to check current verbosity settings:
  EXEC sp_fulltext_service 'verify_signature';
  SELECT * FROM sys.fulltext_catalogs;
  • To reduce informational noise in future logs, adjust the logging level using:
  EXEC sp_configure 'show advanced options', 1;
  RECONFIGURE;
  EXEC sp_configure 'fulltext log verbosity', 0;
  RECONFIGURE;
  • Restart the SQL Server Full-Text Filter Daemon Launcher service via services.msc or:
  Restart-Service MSSQLFDLauncher

Step 3: Validate the Full-Text Catalog and Index Health

  • Run a manual population check to ensure the underlying table/indexed view referenced in the message populated correctly:
  SELECT object_name(table_id) AS TableName, status, status_description
  FROM sys.dm_fts_index_population;
  • If the catalog shows signs of corruption (status_description returns “FAILED” instead of “IDLE”), rebuild it:
  ALTER FULLTEXT CATALOG YourCatalogName REBUILD;

Step 4: Check Disk and Permissions for the Full-Text Catalog Directory

  • Navigate to the catalog folder, typically located at:
    C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData
  • Confirm the SQL Server service account has Read/Write permissions on this folder.
  • Check available disk space; insufficient space can cause population delays that generate repeated informational entries.

Alternative or Verification Steps

  • Re-run SELECT * FROM sys.dm_fts_index_population; after a scheduled population — a returned row count of 0 confirms population is complete and healthy with no pending crawls.
  • If repeated messages persist and cause log clutter, consider filtering Error 9943 out of your monitoring/alerting tool (e.g., SCOM, SQL Agent Alerts) since it does not indicate a functional problem.

How to fix Error 9942 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9942 – Full-Text Population Informational Message

Why This Error Happens

Error 9942 is actually an informational message, not a critical failure—it is logged by SQL Server whenever a full-text population (crawl) starts or completes for a given table or indexed view. This message typically appears in the SQL Server Error Log because the Full-Text Engine (FTE) is reporting status on a scheduled, incremental, or manual population request. In most cases, it signals normal operation, but if it appears excessively or is paired with population failures, it usually points to underlying issues such as a corrupted full-text catalog, insufficient permissions on the full-text index filegroup, or resource contention during large-scale crawls.

Step-by-Step Resolution Guide

Step 1: Confirm the Message is Informational, Not an Error

  • Open SQL Server Management Studio (SSMS) and navigate to Management > SQL Server Logs.
  • Filter the log for Event ID 9942 and review the accompanying text (e.g., “population for table or indexed view… has completed/started”).
  • Confirm there are no accompanying error-level messages (Severity 16+) immediately before or after it.

Step 2: Verify Full-Text Catalog and Index Health

  • Run the following query to check catalog status:
  SELECT * FROM sys.fulltext_catalogs;
  SELECT * FROM sys.dm_fts_index_population;
  • If a catalog shows a status other than “Idle” or “Online” for an extended period, rebuild it:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Check the physical catalog files under C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\ for corruption or unexpected size discrepancies.

Step 3: Validate Service Account Permissions

  • Open Services.msc on Windows Server 2025 / Windows 11 and locate the SQL Server (MSSQLSERVER) and SQL Full-text Filter Daemon Launcher services.
  • Ensure the service account has Read/Write access to the FTData directory and the database files directory.
  • Restart both services after any permission changes:
  Restart-Service -Name 'MSSQLSERVER'
  Restart-Service -Name 'MSSQLFDLauncher'

Step 4: Manually Repopulate the Full-Text Index

  • If the informational messages indicate a stalled or repeating crawl, force a full repopulation:
  ALTER FULLTEXT INDEX ON [YourSchema].[YourTable] START FULL POPULATION;
  • Monitor progress via sys.dm_fts_index_population until the status_description returns to Idle.

Step 5: Review Resource Allocation for Large Crawls

  • Check Task Manager > Performance tab on Windows Server 2025 for CPU/Memory pressure during the crawl window.
  • If the server is resource-constrained, adjust the maxfulltextcrawl_range configuration value or schedule population during off-peak hours using SQL Server Agent.

Alternative or Verification Steps

  • Re-run SELECT * FROM sys.dm_fts_index_population; and confirm the row for the affected table disappears (indicating population completed) or shows status = 0 (idle).
  • If messages persist excessively, drop and recreate the full-text index as a last resort: DROP FULLTEXT INDEX ON [YourTable]; followed by CREATE FULLTEXT INDEX ON [YourTable](...) KEY INDEX [YourPK] ON [YourCatalog];

How to fix Error 9941 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9941 – Full-Text Population Informational Message in SQL Server 2025

Why This Error Happens

Error 9941 is actually an informational message, not a critical failure, that SQL Server logs when a full-text index population (full, incremental, or background update) starts or completes for a specific table or indexed view. It typically appears in the SQL Server Error Log or Event Viewer simply to notify administrators of population activity, but it can be mistaken for an error when population jobs stall, run excessively long, or fail silently afterward. The underlying root cause of population issues tied to this message is usually a corrupted full-text catalog, insufficient permissions on the full-text index filegroup, or resource contention (I/O or memory) during crawl operations on Windows Server 2025.

Step-by-Step Resolution Guide

Step 1: Verify the Full-Text Service Status

  • Open SQL Server Configuration Manager and confirm that the SQL Server Full-Text Filter Daemon Launcher service (MSSQLFDLauncher) is running.
  • Check Windows Services (services.msc) on Windows Server 2025 / Windows 11 to ensure the service is not disabled or stuck in “Starting” state.
  • Restart the service if needed: net stop MSSQLFDLauncher followed by net start MSSQLFDLauncher.

Step 2: Inspect and Repair the Full-Text Catalog

  • Run the following T-SQL to check catalog health:
  SELECT * FROM sys.fulltext_catalogs;
  • If the catalog shows as corrupted or inaccessible, rebuild it:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Confirm the catalog file path (commonly under C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData) is not read-only or missing due to permission drift.

Step 3: Validate Permissions on the Full-Text Index Filegroup

  • Ensure the SQL Server service account has Modify and Read/Write NTFS permissions on the folder hosting the full-text data files.
  • In SQL Server Management Studio (SSMS), verify the service account is a member of the db_owner role or has been granted ALTER and REFERENCES permissions on the affected table.
  • Re-run population manually to confirm permissions are resolved:
  ALTER FULLTEXT INDEX ON [YourTable] START FULL POPULATION;

Step 4: Monitor Resource Usage During Crawl

  • Open Performance Monitor (perfmon.exe) and track the MSSQL$Instance: Full-Text counters for crawl rate and active crawls.
  • Check for high disk I/O or memory pressure using Task Manager or Resource Monitor while population is running.
  • If contention exists, schedule full-text population during off-peak hours using SQL Server Agent jobs.

Alternative or Verification Steps

  • Query sys.dm_fts_index_population to confirm the population status shows COMPLETED rather than IN PROGRESS or FAILED.
  • If issues persist, drop and recreate the full-text index entirely using DROP FULLTEXT INDEX followed by CREATE FULLTEXT INDEX, then re-trigger population to rule out metadata corruption.

How to fix Error 9940 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9940 – Full-Text Population Failure

Why This Error Happens

Error 9940 occurs when SQL Server’s full-text indexing engine encounters a problem accessing the underlying table, indexed view, or the full-text catalog associated with it during a population (crawl) operation. This is typically caused by a corrupted full-text catalog, insufficient permissions for the SQL Server service account on the catalog’s file system location, or an interrupted population process due to a schema change on the base table while crawling was active. In some cases, this error also surfaces when the Filter Daemon Host service (MSSQLFDLauncher) is unresponsive or has crashed mid-population.

Step-by-Step Resolution Guide

Step 1: Verify the Full-Text Filter Daemon Service Status

  • Open Services.msc on Windows Server 2025 / Windows 11 and locate SQL Full-text Filter Daemon Launcher (MSSQLFDLauncher).
  • Ensure the service is running under the correct service account and is not in a “Stopping” or “Stopped” state.
  • Restart the service using net stop MSSQLFDLauncher followed by net start MSSQLFDLauncher in an elevated Command Prompt.

Step 2: Check Permissions on the Full-Text Catalog Directory

  • Navigate to the default data path, typically C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA\.
  • Confirm that the SQL Server service account (e.g., NT Service\MSSQLSERVER) has Full Control permissions on the catalog folder.
  • If permissions are missing, right-click the folder, go to Properties > Security > Edit, and add the service account with Full Control.

Step 3: Rebuild the Full-Text Catalog

  • Connect to the instance via SQL Server Management Studio (SSMS).
  • Run the following T-SQL command to rebuild the catalog associated with the affected table:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Once the rebuild completes, manually restart the population:
  ALTER FULLTEXT INDEX ON [YourTable] START FULL POPULATION;

Step 4: Review SQL Server Error Logs for Underlying Table Locks

  • Open the SQL Server Error Log via SSMS > Management > SQL Server Logs.
  • Look for concurrent schema modification errors (e.g., ALTER TABLE) that may have interrupted the crawl.
  • If a schema lock conflict is identified, pause any automated jobs/scripts that modify the table schema during index population windows.

Step 5: Validate Disk Space and I/O Health

  • Confirm the drive hosting the full-text catalog has sufficient free space (at least 20% recommended).
  • Use Get-Volume in PowerShell to check disk health status and free space thresholds.

Alternative or Verification Steps

  • Run SELECT * FROM sys.dm_fts_index_population; to confirm the population status shows as “Idle” or “Completed” rather than stuck in a “Crawl Aborted” state.
  • If the error persists, drop and recreate the full-text index entirely using DROP FULLTEXT INDEX ON [YourTable] followed by a fresh CREATE FULLTEXT INDEX statement to eliminate catalog corruption.

How to fix Error 9939 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9939 – Insufficient Permission to Set Owner

Why This Error Happens

Error 9939 occurs when the current user or role attempting to change the ownership of a securable (such as a schema, database, or object) does not hold the CONTROL or TAKE OWNERSHIP permission required for that operation. This typically happens because the executing login is not a member of sysadmin or db_owner, or because explicit ALTER AUTHORIZATION permissions have not been granted on the target object. It can also surface when ownership chaining is broken between a schema and the role being assigned, preventing SQL Server from validating the authorization change.

Step-by-Step Resolution Guide

Step 1: Verify the Current User’s Role Membership

  • Open SQL Server Management Studio (SSMS) and connect to the instance using an account with administrative privileges.
  • Run the following query to check the current user’s roles:
  SELECT IS_ROLEMEMBER('db_owner');
  SELECT IS_SRVROLEMEMBER('sysadmin');
  • If both return 0, the account lacks the necessary privileges to change ownership.

Step 2: Grant the Required ALTER AUTHORIZATION Permission

  • Identify the securable (database, schema, or object) where ownership is being changed.
  • Grant explicit permission using:
  GRANT TAKE OWNERSHIP ON OBJECT::YourObjectName TO [YourUserOrRole];
  GRANT ALTER ON OBJECT::YourObjectName TO [YourUserOrRole];
  • For schema-level ownership issues, use:
  GRANT ALTER AUTHORIZATION ON SCHEMA::YourSchemaName TO [YourUserOrRole];

Step 3: Temporarily Elevate Privileges to Execute the Ownership Change

  • If the user genuinely requires ownership rights long-term, add them to the db_owner role:
  ALTER ROLE db_owner ADD MEMBER [YourUserOrRole];
  • For a one-time fix, log in with an account that is already a member of sysadmin and execute the ALTER AUTHORIZATION statement on behalf of the requesting user.
  • Avoid granting sysadmin permanently unless organizational policy explicitly requires it.

Step 4: Check for Broken Ownership Chains on Windows Server 2025

  • On Windows Server 2025 / Windows 11, confirm that the SQL Server service account (found in Services.msc under “SQL Server (MSSQLSERVER)”) has not changed, as this can affect implicit authorization checks.
  • Restart the SQL Server service if permissions were recently modified at the OS or Active Directory level:
  Restart-Service -Name 'MSSQLSERVER' -Force
  • Re-run the ownership change command after the service restarts.

Alternative or Verification Steps

  • Confirm the fix by re-running the original ALTER AUTHORIZATION or ownership-change statement as the originally affected user; it should now complete without Error 9939.
  • If the error persists, use sp_helprotect 'YourObjectName' to audit all permissions on the object and identify any explicit DENY statements overriding the granted rights.

How to fix Error 9938 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9938 — “Cannot find the specified user or role”

Why This Error Happens

Error 9938 typically occurs when a database operation (such as ALTER AUTHORIZATION, sp_changedbowner, or a DDL/security-related statement) references a user or role that does not exist in the target database’s sys.database_principals catalog. This often happens because the principal was deleted, never created in that specific database, or exists at the server level (as a login) but was never mapped to a database user. It can also surface after a database restore or migration where user mappings became orphaned, meaning the SID no longer matches an existing login.

Step-by-Step Resolution Guide

Step 1: Verify the User or Role Exists in the Target Database

  • Connect via SQL Server Management Studio (SSMS) or sqlcmd to the specific database mentioned in the error.
  • Run the following query to check for the principal:
  SELECT name, type_desc, sid 
  FROM sys.database_principals 
  WHERE name = 'YourUserOrRoleName';
  • If the query returns zero rows, the principal genuinely does not exist in this database context.

Step 2: Check for Orphaned Users (Server-to-Database Mapping Issues)

  • Run sp_validatelogins or the following query to identify mismatched SIDs between the server login and database user:
  SELECT dp.name AS DBUser, dp.sid 
  FROM sys.database_principals dp
  LEFT JOIN sys.server_principals sp ON dp.sid = sp.sid
  WHERE sp.sid IS NULL AND dp.type IN ('S','U');
  • If an orphaned user is found, re-link it using:
  ALTER USER [YourUserName] WITH LOGIN = [CorrespondingServerLogin];

Step 3: Recreate the Missing User or Role

  • If the principal was deleted entirely, recreate it. For a login-mapped user, use:
  CREATE USER [YourUserName] FOR LOGIN [YourUserName];
  • For a database role, use:
  CREATE ROLE [YourRoleName] AUTHORIZATION dbo;
  • Ensure you are executing this in the correct database context (USE [YourDatabaseName];) before running the command.

Step 4: Review the Calling Script or Application Code

  • Check any stored procedures, deployment scripts (DACPAC/BACPAC), or application connection logic that explicitly references the user/role name.
  • Look for case-sensitivity issues or trailing whitespace in the name, especially if the server collation is case-sensitive (e.g., SQL_Latin1_General_CP1_CS_AS).
  • Update the script to reference the correct, currently valid principal name.

Alternative or Verification Steps

  • Verify the Fix: Re-run the original failing command or deployment script. Additionally, query sys.database_principals again to confirm the user/role now appears with the correct type_desc (e.g., SQL_USER or DATABASE_ROLE).
  • Alternative Solution: If the database was recently restored from a backup taken on a different server, run EXEC sp_change_users_login 'Auto_Fix', 'YourUserName'; (for backward compatibility scenarios) or use the ALTER USER...WITH LOGIN syntax in Step 2 to resolve SID mismatches in bulk.

How to fix Error 9937 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9937 — Full-Text Query Too Complex

Why This Error Happens

Error 9937 occurs when a full-text query references too many columns in a single CONTAINS or FREETEXT predicate, or when the query plan exceeds the internal complexity limits of the Full-Text Engine (a maximum of 1,024 full-text indexed columns can be referenced across a query batch). This is typically caused by overly broad wildcard searches, queries joining multiple full-text indexed tables simultaneously, or a single table having more full-text columns than the query processor can resolve in one execution plan. It can also surface after upgrading to SQL Server 2025 if legacy queries were written against a less restrictive full-text architecture.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Query and Column Count

  • Open SQL Server Management Studio (SSMS) and locate the exact query from the error log at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG.
  • Run sp_help_fulltext_columns 'YourTableName'; to count how many columns are enrolled in the full-text index.
  • Check if the query uses CONTAINS(*, ...) or FREETEXT(*, ...), which forces the engine to evaluate every indexed column at once.

Step 2: Reduce Query Scope and Column References

  • Rewrite the query to target specific columns instead of using the wildcard * operator:
  CONTAINS((Title, Description), 'SearchTerm')
  • Split complex multi-table full-text joins into separate queries using temporary tables or CTEs to stage intermediate results.
  • Avoid chaining more than 2–3 CONTAINS predicates with OR/AND logic in a single WHERE clause.

Step 3: Rebuild and Optimize the Full-Text Index

  • Open a new query window and run:
  ALTER FULLTEXT INDEX ON YourTableName REBUILD;
  • Remove unused or redundant columns from the full-text index definition via ALTER FULLTEXT INDEX ... DROP (ColumnName); to lower the per-table column count.
  • Restart the SQL Server Full-Text Filter Daemon Launcher service via services.msc on Windows Server 2025 to clear any cached execution plans tied to the old index schema.

Step 4: Adjust Server-Level Full-Text Configuration

  • Verify the max full-text crawl range and resource governor settings using:
  EXEC sp_configure 'show advanced options', 1;
  RECONFIGURE;
  EXEC sp_configure 'max full-text crawl range';
  • If using Windows 11 for a development/test instance, confirm the Full-Text Search feature component is up to date via SQL Server Installation Center > Features.

Alternative or Verification Steps

  • Re-run the original query in SSMS; if Error 9937 no longer appears and results return within expected execution time, the fix is confirmed. Check Query Execution Plan to ensure it no longer shows a “Full-Text Predicate” warning icon.
  • As an alternative, if rewriting queries isn’t feasible, split the full-text index across multiple smaller indexes on logically grouped columns and use UNION ALL to combine results instead of a single complex predicate.

How to fix Error 9936 on Windows Server 2025 / Windows 11

Why This Error Happens

Error 9936 occurs when SQL Server 2025’s Full-Text Search component cannot locate or enumerate the language resource files (.XML and .DLL word-breaker files) required for linguistic processing. This typically happens because the Full-Text and Semantic Extractions component was not installed correctly, the language registry entries in sys.fulltext_languages are empty or corrupted, or the underlying word-breaker binaries were removed during a Windows Server 2025 security patch or in-place OS upgrade. In most cases, this is a configuration/installation state issue rather than a sign of database corruption.

Step-by-Step Resolution Guide

Step 1: Verify Full-Text Search Component Installation

  • Open SQL Server Configuration Manager and confirm the SQL Full-text Filter Daemon Launcher service exists and is running for your instance.
  • If the service is missing, re-run SQL Server 2025 Setup, select Add Features, and ensure Full-Text and Semantic Extractions for Search is checked.
  • Run SELECT SERVERPROPERTY('IsFullTextInstalled'); in SSMS — a result of 0 confirms the component is not installed.

Step 2: Check and Repopulate the sys.fulltext_languages Table

  • Run SELECT * FROM sys.fulltext_languages; — if this returns zero rows, the language metadata is missing.
  • Execute EXEC sp_configure 'default full-text language', 1033; RECONFIGURE; to reset the default language to English (1033) as a baseline.
  • Restart the SQL Server service and the SQL Full-text Filter Daemon Launcher service via services.msc or PowerShell: Restart-Service MSSQLSERVER, MSSQLFDLauncher.

Step 3: Validate Word-Breaker and Resource File Paths

  • Navigate to C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn\FTData\ (adjust the version folder, e.g., MSSQL17, for SQL Server 2025) and confirm .XML language resource files (e.g., sqlresld.xml) and corresponding .DLL word-breaker files are present.
  • If files are missing or appear corrupted, repair the installation via Control Panel > Programs > Microsoft SQL Server 2025 > Uninstall/Repair, selecting the Repair option.
  • Ensure the NT Service\MSSQLFDLauncher account has Read & Execute permissions on the FTData folder (right-click folder > Properties > Security tab).

Step 4: Re-register Full-Text Languages via Transact-SQL

  • Run EXEC sp_fulltext_service 'load_os_resources', 1; to force SQL Server to reload language resources from the OS.
  • Follow with EXEC sp_fulltext_service 'verify_signature', 0; only in test/dev environments if signature verification is blocking resource loading (not recommended for production).
  • Restart the SQL Server instance to apply the reloaded resource mappings.

Alternative or Verification Steps

  • Confirm the fix by running SELECT * FROM sys.fulltext_languages; again — populated rows (e.g., 1033 for English, 1036 for French) confirm successful resolution.
  • If the issue persists after a repair install, uninstall the Full-Text component entirely via Setup, reboot the Windows Server 2025 host, and perform a clean reinstall of Full-Text and Semantic Extractions for Search.

How to fix Error 9935 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9935 – “Warning: Wordbreaker”

Why This Error Happens

Error 9935 occurs when SQL Server’s Full-Text Search engine encounters a mismatch or corruption in the wordbreaker/filter component registered for a specific language LCID. This typically happens after a Windows Update, OS migration, or SQL Server upgrade that fails to properly re-register the sqlserver.xml configuration or the associated wordbreaker DLL files (e.g., MSFTEWBK.dll). Additionally, missing read/execute permissions on the Full-Text binaries folder for the SQL Server service account can prevent the engine from loading the component correctly.

Step-by-Step Resolution Guide

Step 1: Verify the Wordbreaker Registration in sqlserver.xml

  • Navigate to the Full-Text binaries directory, typically located at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn\FTData\sqlserver.xml.
  • Open the XML file and locate the <Language> tag matching the LCID referenced in the error log (check SQL Server Error Log for the specific LCID number).
  • Ensure the Wordbreaker_DLL and Stemmer_DLL paths point to valid, existing files (e.g., MSFTEWBK.dll) and are not pointing to a deprecated path from a previous OS/SQL version.

Step 2: Reset Permissions on the FTData Directory

  • Open File Explorer and navigate to C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn\FTData.
  • Right-click the folder, select Properties > Security, and ensure the SQL Server service account (e.g., NT Service\MSSQLSERVER) has Read & Execute permissions.
  • If permissions are missing, click Edit, add the service account, and apply Read & Execute access to this folder, subfolders, and files.

Step 3: Re-run the Full-Text Configuration Repair

  • Open SQL Server Configuration Manager and stop the SQL Server (MSSQLSERVER) and SQL Server Full-Text Daemon Launcher (MSSQLSERVER) services.
  • Launch an elevated Command Prompt and run the repair utility to force re-registration of the wordbreaker components:
  setup.exe /ACTION=REPAIR /INSTANCENAME=MSSQLSERVER /FTREBUILD=True
  • Restart both services via Configuration Manager once the repair process completes.

Step 4: Rebuild the Affected Full-Text Index

  • Connect to the instance via SQL Server Management Studio (SSMS).
  • Execute the following T-SQL command against the specific database to force the engine to reload the wordbreaker rules:
  ALTER FULLTEXT INDEX ON [YourTableName] REBUILD;
  • Check the SQL Server Error Log immediately after the rebuild to confirm Error 9935 does not reappear.

Alternative or Verification Steps

  • Verification: Run SELECT * FROM sys.dm_fts_parser('"test string"', LCID, 0, 0); in SSMS to confirm the specific LCID parses text without throwing an exception.
  • Alternative: If the error persists, uninstall and reinstall the Full-Text and Semantic Extractions for Search feature via the SQL Server Installation Center to force a clean overwrite of all wordbreaker binaries.

How to fix Error 9934 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9934 — “Row Was Not Found” During Indexing

Why This Error Happens

This error occurs when SQL Server’s online index build or rebuild operation attempts to read a row that was concurrently modified or deleted by another transaction before the index operation could complete its snapshot. It typically surfaces due to heavy concurrent DML (INSERT/UPDATE/DELETE) activity on the target table during an ONLINE = ON index operation, or due to isolation level conflicts between the indexing thread and transactional workload. In rarer cases, it can indicate underlying page-level corruption or a mismatch between the table’s data pages and non-clustered index structures caused by improper shutdowns or storage-level inconsistencies.

Step-by-Step Resolution Guide

Step 1: Rebuild the Index with Adjusted Concurrency Settings

  • Temporarily set the index operation to ONLINE = OFF to avoid row-versioning conflicts during the rebuild.
  • Run the following command during a maintenance window:
ALTER INDEX [YourIndexName] ON [dbo].[YourTableName] REBUILD WITH (ONLINE = OFF);
  • If OFFLINE is not feasible, retry with MAXDOP = 1 to reduce parallel thread contention on row versions.

Step 2: Check and Resolve Blocking Transactions

  • Open SQL Server Management Studio (SSMS) and run sp_who2 or query sys.dm_exec_requests to identify long-running transactions against the affected table.
  • Specifically look for uncommitted transactions holding row locks during the indexing window:
SELECT * FROM sys.dm_tran_locks WHERE resource_database_id = DB_ID('YourDatabase');
  • Pause or reschedule batch jobs, ETL processes, or triggers that modify the table while indexing runs.

Step 3: Run Database Consistency Checks

  • Execute DBCC CHECKDB to rule out underlying corruption as the root cause:
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
  • Review the output for allocation or consistency errors related to the specific table/index ID referenced in Error 9934.
  • If corruption is found, restore from a known-good backup or run DBCC CHECKDB with REPAIR_REBUILD (avoid REPAIR_ALLOW_DATA_LOSS unless no backup is available).

Step 4: Update SQL Server 2025 Cumulative Update

  • Verify your current build version:
SELECT @@VERSION;
  • Navigate to Microsoft Update Catalog and apply the latest Cumulative Update (CU) for SQL Server 2025, as this specific race condition in online indexing has known fixes in recent builds.
  • Restart the SQL Server service via Services.msc or net stop MSSQLSERVER && net start MSSQLSERVER after patching.

Alternative or Verification Steps

  • After applying fixes, re-run the original index rebuild/create statement during off-peak hours and confirm it completes without Error 9934 in the SQL Server Error Log (Management > SQL Server Logs in SSMS).
  • As a workaround for recurring issues on high-transaction tables, schedule index maintenance using sp_updatestats combined with ALTER INDEX ... REORGANIZE instead of full REBUILD operations during business hours to minimize row-versioning conflicts.

How to fix Error 9933 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9933 in Microsoft SQL Server 2025

Why This Error Happens

Error 9933 occurs when the SQL Server full-text indexing filter daemon host (MSSQLFDLauncher) calls the protocol handler (the component responsible for passing row data to the indexer) in an unexpected order, typically during high-concurrency population or crawl operations. This is most often caused by a corrupted full-text catalog, a stalled or orphaned filter daemon process, or a transient timing issue between the SQL Server Database Engine and the full-text indexing subsystem. Despite the alarming wording, Microsoft explicitly flags this as an informational message, meaning the row is typically skipped or retried automatically without data loss.

Step-by-Step Resolution Guide

Step 1: Verify the Severity and Context of the Message

  • Check the SQL Server Error Log (C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG) for the full context surrounding Error 9933.
  • Confirm there are no accompanying critical errors (e.g., Error 9954 or 7684) that indicate actual catalog corruption rather than a benign sequencing issue.
  • Run SELECT * FROM sys.dm_fts_index_population; to check if the population status is Active or Stalled.

Step 2: Restart the Full-Text Filter Daemon Launcher Service

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER).
  • Right-click and select Restart to clear any stuck protocol handler threads.
  • Alternatively, run the following in an elevated Command Prompt:
  net stop MSSQLFDLauncher$MSSQLSERVER
  net start MSSQLFDLauncher$MSSQLSERVER

Step 3: Rebuild the Full-Text Catalog

  • Identify the affected catalog using:
  SELECT name, data_space_id FROM sys.fulltext_catalogs;
  • Rebuild the catalog to clear any residual indexing state:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Repopulate the full-text index afterward:
  ALTER FULLTEXT INDEX ON [dbo].[YourTable] START FULL POPULATION;

Step 4: Check for Resource Contention or Throttling

  • Open Resource Monitor or Task Manager on the Windows Server 2025 host and inspect CPU/Disk I/O usage during the population window.
  • Verify that fdhost.exe (the Full-Text Filter Daemon Host process) is not being throttled or killed due to memory pressure.
  • If using Resource Governor, confirm the full-text workload group is not under-provisioned.

Step 5: Apply the Latest SQL Server 2025 Cumulative Update

  • Navigate to the Microsoft Update Catalog and download the latest Cumulative Update (CU) for SQL Server 2025.
  • Install the update and restart the SQL Server (MSSQLSERVER) service.
  • This resolves known timing-related bugs in the full-text protocol handler present in early builds.

Alternative or Verification Steps

  • To verify the fix, re-run a full population on the affected table and monitor the ERRORLOG for recurrence of Error 9933 — if it no longer appears (or appears without affecting row counts in sys.dm_fts_index_population), the issue is resolved.
  • As an alternative, if the error persists intermittently, drop and recreate the full-text index entirely (DROP FULLTEXT INDEX followed by CREATE FULLTEXT INDEX) rather than just rebuilding the catalog, as this clears any underlying metadata inconsistencies tied to the indexed table.

How to fix Error 9932 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9932 — “Document Type Value Is Malformed”

Why This Error Happens

This error occurs when the full-text indexing engine encounters a value in the document type column (typically used in FILESTREAM or varbinary columns with a type column, such as a file extension column like .docx or .pdf) that does not match a recognized or valid document type format. This is often caused by NULL, empty, truncated, or inconsistent type values that do not correspond to a registered iFilter, or by corruption in the column data itself. It can also happen if the type column contains extraneous whitespace, incorrect casing, or a missing leading period (e.g., docx instead of .docx) that the full-text engine cannot parse correctly.

Step-by-Step Resolution Guide

Step 1: Identify the Malformed Rows

  • Run a query against the base table to locate rows with NULL, blank, or suspicious values in the document type column:
  SELECT id_column, type_column, LEN(type_column) AS TypeLength
  FROM YourTable
  WHERE type_column IS NULL 
     OR type_column = '' 
     OR type_column NOT LIKE '.[a-z][a-z][a-z]';
  • Cross-reference these rows against the actual binary content (e.g., using a hex editor or sys.fulltext_document_types) to confirm the stored extension matches the real file format.

Step 2: Correct or Normalize the Document Type Column

  • Ensure every value in the type column begins with a leading period and uses lowercase letters (e.g., .pdf, .docx, .xlsx).
  • Run a cleanup script to standardize values:
  UPDATE YourTable
  SET type_column = LOWER(LTRIM(RTRIM(type_column)))
  WHERE type_column IS NOT NULL;

  UPDATE YourTable
  SET type_column = '.' + type_column
  WHERE type_column NOT LIKE '.%';
  • Verify the corrected values against sys.fulltext_document_types to confirm SQL Server actually supports and has a registered iFilter for that extension.

Step 3: Validate and Reinstall Missing iFilters

  • Open SQL Server Management Studio (SSMS) and run:
  EXEC sp_fulltext_service 'load_os_resources', 1;
  EXEC sp_fulltext_service 'verify_signature', 0;
  • On Windows Server 2025 / Windows 11, confirm the correct iFilter package (e.g., PDF iFilter, Office iFilter) is installed under:
  C:\Program Files\Microsoft Office Servers\16.0\FilterPacks\
  • Restart the SQL Server Full-Text Filter Daemon Launcher service (MSSQLFDLauncher) via services.msc or PowerShell:
  Restart-Service -Name "MSSQLFDLauncher$<InstanceName>"

Step 4: Rebuild the Full-Text Index

  • Drop and recreate the full-text catalog to force a clean re-index of corrected data:
  ALTER FULLTEXT INDEX ON YourTable START FULL POPULATION;
  • Monitor the SQL Server Error Log and sys.fulltext_index_fragments to confirm the population completes without further 9932 errors.

Alternative or Verification Steps

  • Query sys.dm_fts_index_population during the full population to confirm the row count processed matches the expected total with zero error rows remaining.
  • If Error 9932 persists after cleanup, isolate and exclude the problematic rows temporarily using a filtered full-text index predicate, then investigate the source application responsible for writing malformed type values into the column.

How to fix Error 9931 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9931 – “Document Type Exceeds Maximum Permitted Length” in SQL Server 2025

Why This Error Happens

This error occurs when the Full-Text Engine attempts to index a document (such as a .docx, .pdf, or .xml file stored in a column using a compatible filter) that exceeds the maximum size the associated IFilter is configured or able to process. SQL Server’s full-text indexing component has hard-coded and configurable limits on document size to prevent excessive memory consumption during the filtering/word-breaking stage. When a row contains binary or text data larger than this threshold, the Full-Text Gatherer skips that row entirely rather than failing the whole index population, logging Error 9931 in the process.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Row and Document Size

  • Query the table to find large values in the indexed column: SELECT id, DATALENGTH(DocumentColumn) FROM YourTable ORDER BY DATALENGTH(DocumentColumn) DESC;
  • Cross-reference the id with the Windows Application Event Log entry for Event ID 9931 to confirm which row triggered the failure.
  • Note the file type extension or document format stored (check the type_column if using FILESTREAM or FileTable).

Step 2: Adjust the Full-Text Engine Memory and Size Limits

  • Open SQL Server Management Studio (SSMS) and connect to your Windows Server 2025 instance.
  • Run EXEC sp_configure 'show advanced options', 1; RECONFIGURE; followed by EXEC sp_configure 'max full-text crawl range', 4; RECONFIGURE; to redistribute crawl load.
  • Since SQL Server 2025 deprecates manual registry-based IFilter size overrides, instead increase the max text repl size server configuration value if replication/filtering interacts with large objects: EXEC sp_configure 'max text repl size', 268435456; RECONFIGURE;
  • Restart the SQL Server Full-text Filter Daemon Launcher service via services.msc or net stop MSSQLFDLauncher && net start MSSQLFDLauncher.

Step 3: Exclude or Reformat Oversized Documents

  • If the document legitimately exceeds supported limits (typically 2 GB for binary objects but lower for specific IFilters like Office or PDF filters), compress or split the file before insertion.
  • Alternatively, exclude oversized rows from full-text indexing by moving them to a non-indexed column or using a filtered index predicate: CREATE FULLTEXT INDEX ON YourTable(DocumentColumn TYPE COLUMN type_column) KEY INDEX PK_YourTable WHERE DATALENGTH(DocumentColumn) < 268435456;
  • Verify the correct IFilter is registered and updated for Windows Server 2025 via EXEC sp_fulltext_service 'load_os_resources', 1;

Step 4: Rebuild and Repopulate the Full-Text Catalog

  • Run ALTER FULLTEXT CATALOG YourCatalogName REBUILD; to clear stale metadata.
  • Follow with ALTER FULLTEXT INDEX ON YourTable START FULL POPULATION; to reprocess all rows under the new configuration.
  • Monitor progress using SELECT * FROM sys.dm_fts_index_population;

Alternative or Verification Steps

  • Verify the fix by re-checking the Windows Application Event Log and confirming Error 9931 no longer appears for the previously flagged row, then run SELECT FULLTEXTCATALOGPROPERTY('YourCatalogName', 'PopulateStatus'); to confirm status returns 0 (idle/complete).
  • If the error persists for specific file types, reinstall or update the relevant IFilter package (e.g., Microsoft Office 2025 Filter Pack) and re-register it using regsvr32 before repeating Step 4.

How to fix Error 9930 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9930 — “Null document type provided. Row will not be full-text indexed.”

Why This Error Happens

This error occurs when SQL Server’s full-text indexing engine encounters a row where the document type column (typically tracked via a “type column” in filestream or varbinary(max) full-text indexed columns) contains a NULL value instead of a valid file extension identifier (e.g., “.docx”, “.pdf”, “.txt”). Because the full-text filter daemon host (MSSQLFDLauncher) relies on this type column to select the correct IFilter for parsing document content, a NULL value leaves it unable to determine how to process the binary data. This is most commonly caused by application-level data insertion errors, migration scripts that forgot to populate the type column, or corrupted metadata left over from a legacy document management schema.

Step-by-Step Resolution Guide

Step 1: Identify the Affected Rows

  • Run a query against the base table to locate NULL values in the designated type column:
  SELECT DocumentID, FileTypeColumn 
  FROM dbo.Documents 
  WHERE FileTypeColumn IS NULL;
  • Cross-reference these DocumentIDs with the SQL Server Error Log or Full-Text crawl log (Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\) to confirm they match the rows flagged with Error 9930.

Step 2: Correct the NULL Type Column Values

  • Update the NULL entries with the correct file extension based on the actual binary content stored in the column.
  UPDATE dbo.Documents
  SET FileTypeColumn = '.pdf'
  WHERE DocumentID = 1024 AND FileTypeColumn IS NULL;
  • If the original file type is unknown, use a PowerShell script on Windows Server 2025 to inspect the binary header (magic bytes) of exported BLOB data to infer the correct extension.
  • Add a NOT NULL constraint or a DEFAULT constraint on the type column going forward to prevent recurrence:
  ALTER TABLE dbo.Documents 
  ADD CONSTRAINT DF_FileType DEFAULT ('.unknown') FOR FileTypeColumn;

Step 3: Repopulate and Rebuild the Full-Text Index

  • Force a full population of the full-text catalog to reprocess the corrected rows:
  ALTER FULLTEXT INDEX ON dbo.Documents START FULL POPULATION;
  • Monitor progress using:
  SELECT * FROM sys.dm_fts_index_population;
  • Confirm the Full-Text Filter Daemon Launcher service (MSSQLFDLauncher) is running under Services.msc on Windows Server 2025, as a stopped service will also prevent indexing regardless of data correctness.

Alternative or Verification Steps

  • After population completes, query sys.fulltext_index_fragments and re-check the SQL Server Error Log to confirm Error 9930 no longer appears for the corrected DocumentIDs.
  • If the error persists despite valid type values, drop and recreate the full-text index entirely (DROP FULLTEXT INDEX ON dbo.Documents followed by CREATE FULLTEXT INDEX), as catalog metadata corruption can sometimes require a full rebuild rather than a simple repopulation.

How to fix Error 9929 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9929 — Computed Column Cannot Be Used as Full-Text Type Column

Why This Error Happens

This error occurs when you attempt to create a full-text index on a computed column that specifies a TYPE COLUMN for an image or varbinary(max) column, but the computed column itself is not marked as deterministic. SQL Server 2025 requires that any computed column used to supply document type information (such as file extension) for full-text indexing produce consistent, repeatable output for the same input values every time it is evaluated. If the computed column references non-deterministic functions, external data sources, or certain system functions, the Query Optimizer cannot guarantee deterministic behavior, and the full-text index creation is blocked.

Step-by-Step Resolution Guide

Step 1: Identify the Computed Column Definition

  • Run the following query to inspect the computed column causing the issue:
  • SELECT name, definition, is_deterministic FROM sys.computed_columns WHERE object_id = OBJECT_ID('YourTableName');
  • Check the is_deterministic column value — if it returns 0, this confirms the root cause.
  • Review the definition column to identify any non-deterministic functions (e.g., GETDATE(), NEWID(), RAND(), or CLR functions marked as non-deterministic).

Step 2: Rewrite the Computed Column with Deterministic Logic

  • Modify the computed column formula to only use deterministic built-in functions such as SUBSTRING(), CHARINDEX(), LEFT(), or RIGHT().
  • Drop and recreate the column using T-SQL:
  • ALTER TABLE YourTableName DROP COLUMN FileExtensionColumn;
  • ALTER TABLE YourTableName ADD FileExtensionColumn AS (RIGHT(FileName, 3)) PERSISTED;
  • Adding the PERSISTED keyword is critical, as full-text indexing type columns generally require persisted, deterministic values.

Step 3: Validate Schema Binding and Function Dependencies

  • If the computed column calls a user-defined function (UDF), open the function in SQL Server Management Studio (SSMS) and verify it includes the WITH SCHEMABINDING clause.
  • Ensure the UDF does not call any system functions that are inherently non-deterministic (e.g., @@ERROR, NEWID(), or OPENDATASOURCE).
  • Recompile the function and re-verify determinism status using SELECT OBJECTPROPERTY(OBJECT_ID('YourFunctionName'), 'IsDeterministic'); (should return 1).

Step 4: Recreate the Full-Text Index

  • Once the computed column is confirmed deterministic, drop any existing broken full-text catalog/index remnants:
  • DROP FULLTEXT INDEX ON YourTableName;
  • Recreate the full-text index, explicitly pointing the TYPE COLUMN argument to the newly fixed deterministic column:
  • CREATE FULLTEXT INDEX ON YourTableName(DocumentContent TYPE COLUMN FileExtensionColumn) KEY INDEX PK_YourTableName ON YourFullTextCatalog;

Alternative or Verification Steps

  • Verification: After recreating the index, run SELECT * FROM sys.fulltext_indexes WHERE object_id = OBJECT_ID('YourTableName'); to confirm the is_enabled status is set to 1 without throwing Error 9929.
  • Alternative: If modifying the computed column is not feasible due to application dependencies, bypass the computed column entirely by adding a standard, static varchar or nchar column to manually store the file extension type, then populate it via an INSTEAD OF trigger or application-layer logic before pointing the full-text index to that static column instead.

How to fix Error 9928 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9928 – Computed Column Cannot Be Used for Full-Text Search

Why This Error Happens

This error occurs because SQL Server requires any computed column included in a full-text index to be both deterministic and precise, meaning it must always return the same result for the same input values without relying on non-persisted, imprecise, or volatile operations (such as floating-point math, non-deterministic functions, or CLR functions not marked deterministic). When a computed column’s underlying expression is marked as nonpersisted and depends on calculations that SQL Server cannot guarantee to be reproducible, the Database Engine blocks it from being indexed via full-text search. This is a protective mechanism to prevent full-text index corruption or inconsistent search results caused by changing or unpredictable column data.

Step-by-Step Resolution Guide

Step 1: Identify the Problematic Computed Column

  • Run the following query to locate the offending column and verify its properties:
SELECT name, is_persisted, is_deterministic, is_precise 
FROM sys.computed_columns 
WHERE object_id = OBJECT_ID('YourTableName');
  • Confirm that is_persisted = 0 and is_deterministic = 0 or is_precise = 0, which aligns with Error 9928.

Step 2: Make the Computed Column Persisted

  • Alter the table to mark the computed column as PERSISTED, forcing SQL Server to physically store the computed values rather than recalculate them dynamically.
  • Example syntax:
ALTER TABLE YourTableName
ALTER COLUMN YourComputedColumn AS (YourExpression) PERSISTED;
  • Note: This only works if the underlying expression is deterministic; if not, proceed to Step 3.

Step 3: Refactor the Expression for Determinism

  • Review the computed column’s formula and replace any nondeterministic functions (e.g., GETDATE(), RAND(), NEWID()) with deterministic alternatives.
  • Avoid implicit or explicit conversions involving float or real data types, as these are considered imprecise in SQL Server’s full-text engine.
  • Re-run the ALTER TABLE statement from Step 2 once the expression is deterministic.

Step 4: Rebuild the Full-Text Index

  • After successfully persisting the column, drop and recreate the full-text index to ensure SQL Server recognizes the updated schema.
ALTER FULLTEXT INDEX ON YourTableName DROP (YourComputedColumn);
ALTER FULLTEXT INDEX ON YourTableName ADD (YourComputedColumn TYPE COLUMN YourComputedColumn LANGUAGE 1033);
ALTER FULLTEXT INDEX ON YourTableName START FULL POPULATION;

Step 5: Validate Catalog and Service Account Permissions

  • Ensure the SQL Server Full-Text Filter Daemon Launcher service (MSSQLFDLauncher) is running under Windows Server 2025 / Windows 11.
  • Verify the service account has appropriate read/write permissions on the full-text catalog directory (default path: C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData).

Alternative or Verification Steps

  • To verify the fix, query sys.fulltext_index_columns joined with sys.computed_columns to confirm the column now appears with is_persisted = 1 and is successfully listed under the full-text index.
  • If persisting the column is not feasible due to business logic constraints, consider creating a separate persisted column via a trigger or scheduled job that mirrors the computed value, then apply the full-text index to that static column instead.

How to fix Error 9927 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9927 – Full-Text Search Condition Contained Noise Word(s)

Why This Error Happens

This is an informational message, not a critical failure, triggered when a full-text query contains one or more “noise words” (also known as stopwords, such as “the,” “a,” or “is”) that SQL Server’s full-text engine ignores during indexing and querying. The error surfaces because the query processor strips these words out of the search condition before execution, which can lead to unexpected or broader result sets than intended. This typically occurs due to the default stopword list configuration associated with the full-text index’s language, or because a custom stoplist has not been properly applied to the target table or indexed column.

Step-by-Step Resolution Guide

Step 1: Identify the Stopword List in Use

  • Open SQL Server Management Studio (SSMS) and connect to your SQL Server 2025 instance.
  • Run the following query to determine which stoplist is associated with your full-text index:
  SELECT name, stoplist_id FROM sys.fulltext_indexes WHERE object_id = OBJECT_ID('YourTableName');
  • Check if stoplist_id is NULL (system stoplist) or references a custom stoplist ID.

Step 2: Review and Modify the Stopword List

  • Query the specific words flagged as noise using:
  SELECT * FROM sys.fulltext_stopwords WHERE stoplist_id = YourStoplistID;
  • If a legitimate search term (e.g., “it” for an IT department search) is being filtered, remove it from the stoplist:
  ALTER FULLTEXT STOPLIST YourStoplistName DROP 'it' LANGUAGE 'English';
  • Alternatively, create a new empty stoplist if you want to disable noise word filtering entirely for specific columns:
  CREATE FULLTEXT STOPLIST EmptyStopList;
  ALTER FULLTEXT INDEX ON YourTableName SET STOPLIST EmptyStopList;

Step 3: Rebuild the Full-Text Catalog

  • After modifying the stoplist, you must repopulate the index for changes to take effect.
  • Navigate to the specific database in SSMS, right-click the Full-Text Catalog, and select Rebuild.
  • Alternatively, run the T-SQL command:
  ALTER FULLTEXT INDEX ON YourTableName START FULL POPULATION;
  • Monitor the sys.dm_fts_index_population DMV to ensure the population status reaches “Idle” (completed).

Step 4: Validate Windows Server Permissions

  • Ensure the SQL Server Service Account has “Full Control” permissions on the Full-Text Catalog folder located in your data directory (e.g., C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData).
  • Restart the SQL Server (MSSQLSERVER) service via services.msc if permissions were recently updated on Windows Server 2025.

Alternative or Verification Steps

  • Verify the Fix: Re-run the original CONTAINS or FREETEXT query. If the noise word is no longer stripped (and you removed it from the stoplist), the search results should now include matches based on that specific term without generating the Error 9927 warning.
  • Alternative Solution: If editing the system stoplist causes performance degradation on large tables, consider using CONTAINSTABLE with specific ranking logic to bypass strict noise word filtering while keeping the default stoplist intact for other columns.

How to fix Error 9926 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9926 – MS Search Stop Limit Reached

Why This Error Happens

Error 9926 occurs when the Full-Text Search engine (MS Search) internally reaches a predefined row processing limit before it can complete evaluating all matching documents in the full-text index. This is typically caused by extremely large result sets, fragmented or bloated full-text catalogs, or insufficient resources allocated to the Full-Text Daemon Launcher service. It is informational rather than fatal, meaning the query still executes, but the returned row count may be artificially truncated, leading to incomplete search results.

Step-by-Step Resolution Guide

Step 1: Rebuild and Reorganize the Full-Text Catalog

  • Open SQL Server Management Studio (SSMS) and connect to the affected instance.
  • Navigate to Databases > [YourDB] > Storage > Full Text Catalogs.
  • Right-click the relevant catalog and select Rebuild to clear fragmentation.
  • Alternatively, run the T-SQL command: ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Rebuilding removes stale index entries that can cause the search engine to process unnecessarily large internal row sets.

Step 2: Increase Full-Text Search Resource Limits

  • Open Registry Editor (regedit) on Windows Server 2025 / Windows 11.
  • Navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSearch\CLSID.
  • Locate the MaxFreshCount or equivalent stop-limit key for your SQL Server 2025 instance.
  • Increase the value incrementally (e.g., from 1000 to 5000) to raise the internal row processing threshold.
  • Restart the SQL Full-text Filter Daemon Launcher service for changes to take effect.

Step 3: Restart the Full-Text Search Service and Validate Memory Allocation

  • Open Services.msc on the Windows Server 2025 / Windows 11 host.
  • Locate SQL Server Full-text Filter Daemon Launcher (MSSQLSERVER).
  • Right-click and select Restart.
  • Check SQL Server Configuration Manager to confirm the service is running under an account with sufficient memory and CPU affinity settings.
  • Run EXEC sp_fulltext_service 'resource_usage', 5; in SSMS to increase the resource usage priority level (range 1–5) for full-text queries.

Step 4: Re-run the Full-Text Query in Smaller Batches

  • If the issue persists on very large tables, modify the query to use TOP (n) with pagination.
  • Break large CONTAINSTABLE or FREETEXTTABLE queries into smaller WHERE-clause filtered subsets (e.g., by date range or ID range).
  • This reduces the row volume MS Search must process in a single pass, avoiding the stop limit.

Alternative or Verification Steps

  • After rebuilding the catalog and restarting services, re-run the original full-text query and compare row counts against the expected result set in a non-indexed baseline query (e.g., using LIKE) to confirm completeness.
  • If the error persists, check the SQL Server Error Log and Windows Event Viewer (Applications and Services Logs > MSSQLSERVER) for correlating Event ID entries, and consider dropping and fully recreating the full-text index as a last resort.

How to fix Error 9925 on Windows Server 2025 / Windows 11

Why This Error Happens

Error 9925 occurs when SQL Server 2025 attempts to rebuild a full-text catalog but cannot write to the underlying catalog files because they are flagged as read-only at the file system level. This typically happens after a database restore, a file system permission change, or when the storage volume itself (or a specific folder) has read-only attributes set accidentally. It can also occur if the SQL Server service account lacks write (modify) permissions on the full-text catalog directory following an OS upgrade to Windows Server 2025 / Windows 11.

Step-by-Step Resolution Guide

Step 1: Locate the Full-Text Catalog File Path

  • Open SQL Server Management Studio (SSMS) and run:
    SELECT name, data_space_id, is_default FROM sys.fulltext_catalogs;
  • Cross-reference the catalog name with the physical path using:
    EXEC sp_helpfile; or check the database’s default data folder (commonly C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\).
  • Note the exact folder name matching the catalog GUID or name.

Step 2: Remove the Read-Only Attribute on the Catalog Folder

  • Right-click the catalog folder in File Explorer, select Properties, and uncheck Read-only under the General tab.
  • Alternatively, run this from an elevated Command Prompt:
    attrib -R "C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\*.*" /S /D
  • Confirm the attribute change propagated to all subfolders and files, not just the top-level directory.

Step 3: Verify Service Account Permissions

  • Open Computer Management > Local Users and Groups (or Active Directory Users and Computers for domain accounts) and identify the SQL Server service account (e.g., NT SERVICE\MSSQLSERVER).
  • Right-click the FTData folder, go to Properties > Security > Edit, and grant Full Control to the service account.
  • Apply changes recursively and restart the SQL Server service via services.msc or net stop MSSQLSERVER && net start MSSQLSERVER.

Step 4: Rebuild the Full-Text Catalog

  • In SSMS, right-click the affected catalog under Storage > Full Text Catalogs, and select Rebuild.
  • Alternatively, run the T-SQL command:
    ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Monitor the SQL Server Error Log for confirmation that the rebuild completed without Error 9925 reappearing.

Step 5: Check for Volume-Level Read-Only Flags (If Issue Persists)

  • Open Disk Management or run diskpart, select the volume hosting the SQL data files, and run attributes disk clear readonly.
  • This is especially relevant if the data drive was recently restored from a SAN snapshot, VHDX, or cloud disk image that defaults to read-only.

Alternative or Verification Steps

  • Confirm the fix by re-running ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD; and checking sys.fulltext_catalogs.is_paused or querying the SQL Error Log for successful completion messages.
  • If the error persists, drop and recreate the full-text catalog entirely using DROP FULLTEXT CATALOG followed by CREATE FULLTEXT CATALOG, then reassociate it with the relevant full-text indexes.

How to fix Error 9924 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9924 — Full-Text Catalog Rebuild Failure

Why This Error Happens

This error occurs when SQL Server 2025 attempts to rebuild a full-text catalog, but the underlying catalog header file on disk has its read-only attribute set, preventing the Database Engine service account from writing to it. This typically happens after a file system restore, a manual copy operation, or a backup tool that preserves the read-only flag on the catalog folder. It can also occur if NTFS permissions were altered and the SQL Server service account (e.g., NT Service\MSSQLSERVER) no longer has modify/write rights to the full-text data directory.

Step-by-Step Resolution Guide

Step 1: Locate the Full-Text Catalog Directory

  • Open SQL Server Management Studio (SSMS) and run the following query to find the catalog path:
  SELECT name, path FROM sys.fulltext_catalogs;
  • Navigate to the returned path in Windows Explorer (typically under C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\).
  • Confirm the catalog folder and its header files (.GTH, .FTH) are visible.

Step 2: Remove the Read-Only Attribute

  • Right-click the catalog folder, select Properties, and uncheck the Read-only checkbox under the General tab.
  • Click Apply, then select Apply changes to this folder, subfolders and files when prompted.
  • Alternatively, run this from an elevated Command Prompt:
  attrib -R "C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\*.*" /S /D

Step 3: Verify NTFS Permissions for the SQL Server Service Account

  • Right-click the FTData folder → Properties → Security tab.
  • Confirm the SQL Server service account (e.g., NT Service\MSSQLSERVER or a custom domain service account) has Modify and Write permissions.
  • If missing, click Edit, add the account, and grant Modify rights, then propagate to child objects.

Step 4: Restart the SQL Server Service

  • Open Services.msc (Windows Server 2025) or SQL Server Configuration Manager.
  • Restart the SQL Server (MSSQLSERVER) service to release any locked file handles and reinitialize full-text file access.
  • Confirm the service starts without errors in the SQL Server Error Log.

Step 5: Rebuild the Full-Text Catalog

  • In SSMS, re-run the rebuild command:
  ALTER FULLTEXT CATALOG [CatalogName] REBUILD;
  • Monitor the SQL Server Error Log or Activity Monitor to confirm the rebuild completes without Error 9924.

Alternative or Verification Steps

  • Verify the fix: Re-check the file attributes using attrib on the catalog folder — it should no longer show the R (read-only) flag, and the ALTER FULLTEXT CATALOG REBUILD command should complete successfully.
  • Alternative solution: If permissions and attributes are correct but the error persists, drop and recreate the full-text catalog entirely using DROP FULLTEXT CATALOG [CatalogName] followed by CREATE FULLTEXT CATALOG [CatalogName], then rebuild the associated full-text indexes.

How to fix Error 9923 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9923 – Full-Text Population Low Resource Warning in SQL Server 2025

Why This Error Happens

Error 9923 occurs when SQL Server’s full-text indexing engine (MSFTESQL) encounters memory pressure or resource constraints while streaming a batch of data for indexing. This is typically caused by insufficient system memory allocated to SQL Server, an overloaded Filter Daemon Host process (MSSQLFDLauncher), or a large indexed view/table batch exceeding the available buffer capacity. Corrupted full-text catalogs or outdated word-breaker components can also trigger this warning by causing inefficient memory handling during the population process.

Step-by-Step Resolution Guide

Step 1: Verify and Adjust SQL Server Memory Allocation

  • Open SQL Server Management Studio (SSMS) and connect to the instance.
  • Right-click the server instance, select Properties > Memory, and ensure “Maximum server memory” is not set too restrictively (leave at least 20-25% of total RAM for the OS and full-text daemon).
  • Run EXEC sp_configure 'max server memory' to confirm current settings via T-SQL.

Step 2: Restart the Full-Text Filter Daemon Host Service

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER) and restart it.
  • Alternatively, use PowerShell: Restart-Service -Name "MSSQLFDLauncher".
  • Check Event Viewer under Applications and Services Logs > MSSQLSERVER for recurring 9923 entries post-restart.

Step 3: Rebuild the Full-Text Catalog

  • In SSMS, navigate to Database > Storage > Full Text Catalogs.
  • Right-click the affected catalog and select Rebuild.
  • Alternatively, run the T-SQL command:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • This clears any corrupted index fragments causing memory inefficiencies.

Step 4: Reduce Batch Size for Population

  • Lower the batch size being sent to the MSFTESQL service by adjusting the indexing population type to Incremental instead of Full where applicable.
  • Use the following command to pause and reconfigure if needed:
  ALTER FULLTEXT INDEX ON [YourTable] SET CHANGE_TRACKING MANUAL;
  • Manually trigger smaller, controlled population batches during off-peak hours.

Step 5: Update SQL Server Cumulative Updates

  • Check for the latest Cumulative Update (CU) for SQL Server 2025 via Microsoft Update Catalog.
  • Install the update to patch known memory-handling bugs in the full-text indexing engine.
  • Reboot the server post-installation to finalize changes.

Alternative or Verification Steps

  • Verify the fix: Monitor the SQL Server Error Log and Event Viewer for 24-48 hours to confirm Error 9923 no longer appears during full population cycles.
  • Alternative solution: If the warning persists, drop and recreate the full-text index entirely using DROP FULLTEXT INDEX followed by CREATE FULLTEXT INDEX, ensuring the underlying table statistics are updated beforehand with UPDATE STATISTICS.

How to fix Error 9922 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9922 – Full-Text Population Failure in SQL Server 2025

Why This Error Happens

Error 9922 occurs when the SQL Server Full-Text Filter Daemon process cannot successfully communicate with the MSFTESQL (Full-Text Search) service while populating or crawling an indexed table. This typically stems from the Full-Text Search service being stopped, disabled, or stuck in a hung state, or from the service account lacking the necessary permissions to access the database engine and the full-text catalog directory. It can also be triggered by corrupted full-text catalog files or network/firewall interference between the SQL Server instance and the search service on the same host.

Step-by-Step Resolution Guide

Step 1: Verify and Restart the Full-Text Search Service

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER) or the equivalent named instance service.
  • Confirm the service is set to Automatic startup and is currently Running.
  • If stopped or unresponsive, right-click and select Restart, then re-run the full-text population job.

Step 2: Check Service Account Permissions

  • Open SQL Server Configuration Manager and review the account running the SQL Server (MSSQLSERVER) and Full-text Filter Daemon Launcher services.
  • Ensure the account has Read/Write access to the full-text catalog folder, typically located at:
    C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData
  • Grant the service account db_owner or appropriate full-text indexing permissions on the target database via SSMS > Security > Logins.
  • Restart the SQL Server service after applying permission changes.

Step 3: Rebuild the Full-Text Catalog

  • Open a query window in SQL Server Management Studio (SSMS).
  • Run the following command to rebuild the catalog associated with the affected table:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Once rebuilt, repopulate the index:
  ALTER FULLTEXT INDEX ON [YourTableName] START FULL POPULATION;

Step 4: Check Firewall and Local Port Communication

  • Confirm that Windows Defender Firewall (or third-party firewall) is not blocking local inter-process communication (IPC) between sqlservr.exe and fdlauncher.exe.
  • Navigate to Windows Defender Firewall > Advanced Settings > Inbound Rules and ensure SQL Server-related rules are enabled.
  • Temporarily disable the firewall as a test (in a non-production environment) to confirm it is not the root cause.

Alternative or Verification Steps

  • After completing the steps above, check the SQL Server Error Log and Windows Event Viewer (Application Log) to confirm Error 9922 no longer appears during the next scheduled population.
  • If the issue persists, drop and recreate the full-text catalog entirely using DROP FULLTEXT CATALOG followed by CREATE FULLTEXT CATALOG, then rebuild the index from scratch.

How to fix Error 9921 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9921 — CoCreateGuid Failure During SQL Server Upgrade

Why This Error Happens

Error 9921 occurs when SQL Server Setup cannot generate a unique GUID via the Windows CoCreateGuid API while attempting to resolve the file name for a full-text catalog during an upgrade. This typically happens because the COM subsystem is not properly initialized for the service account, the Windows installation has corrupted or missing COM/RPC components, or the account running the upgrade lacks sufficient permissions on the registry and file system paths used by full-text search. In some cases, this is also triggered by a damaged full-text catalog folder structure left over from a previous SQL Server instance.

Step-by-Step Resolution Guide

Step 1: Verify COM and RPC Services Are Running

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Confirm that Remote Procedure Call (RPC) and RPC Endpoint Mapper are set to “Automatic” and currently running.
  • Restart both services if they are stopped, then re-attempt the upgrade.

Step 2: Check Permissions on Full-Text Catalog Directories

  • Navigate to the SQL Server data path, typically: C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData
  • Ensure the SQL Server service account (e.g., NT Service\MSSQLSERVER) has Full Control on this folder and all subfolders.
  • Right-click the folder → Properties → Security → Edit → Add the service account with Full Control permissions.

Step 3: Repair the Windows COM+ Registration

  • Open an elevated Command Prompt and run:
  regsvr32 /u combase.dll
  regsvr32 combase.dll
  • Run sfc /scannow to repair any corrupted system files that may be affecting COM initialization.
  • Reboot the server before retrying the SQL Server upgrade.

Step 4: Remove Orphaned Full-Text Catalog Files

  • Locate any stale .ft catalog folders in the FTData directory not associated with an active database.
  • Back up and then delete orphaned catalog folders that no longer map to a valid sys.fulltext_catalogs entry.
  • Re-run SQL Server Setup and select Upgrade again from the installation wizard.

Step 5: Re-run Setup Using an Elevated, Domain-Validated Account

  • Right-click setup.exe from the SQL Server 2025 installation media and choose Run as Administrator.
  • Ensure the account used is a domain or local administrator with unrestricted access to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer.
  • Proceed through the upgrade wizard and monitor the Summary.txt log in %ProgramFiles%\Microsoft SQL Server\170\Setup Bootstrap\Log for confirmation.

Alternative or Verification Steps

  • After completing the steps above, check the SQL Server Setup log (Detail.txt) in the Bootstrap\Log folder to confirm no further 0x%x COM errors appear near the full-text catalog resolution stage.
  • If the error persists, uninstall the Full-Text Search feature via Add/Remove Programs → SQL Server 2025 → Modify, complete the upgrade without it, then reinstall the Full-Text Search component separately afterward.

How to fix Error 9920 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9920 — Failed to Get MSFTESQL Indexer Interface for Full-Text Catalog

Why This Error Happens

This error typically occurs when the SQL Server Full-Text Filter Daemon Launcher service (or the underlying full-text engine component) is stopped, disabled, or fails to communicate with the Database Engine due to permission issues on the service account. It can also result from a corrupted or inaccessible full-text catalog directory, or from a mismatch/corruption in the full-text component registration after a patch, upgrade, or improper shutdown. In clustered or AlwaysOn environments, this can additionally stem from the full-text service not being properly failed over or started on the active node.

Step-by-Step Resolution Guide

Step 1: Verify the Full-Text Filter Daemon Launcher Service Status

  • Open Services.msc on the Windows Server 2025 / Windows 11 host.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER) (or the named instance equivalent).
  • Ensure the service Startup Type is set to Automatic and the service is currently Running.
  • If stopped, right-click and select Start, then recheck the application for the 9920 error.

Step 2: Validate Service Account Permissions

  • Confirm the service account running the Full-Text Daemon Launcher has read/write access to the full-text catalog directory, typically located at:
    C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\
  • Open Component Services (dcomcnfg) > Computers > My Computer > DCOM Config, locate MSSQLFDLauncher, right-click > Properties > Security tab, and verify the SQL service account has Local Launch and Local Activation permissions.
  • Restart the SQL Server service after applying changes.

Step 3: Rebuild the Full-Text Catalog

  • Open SQL Server Management Studio (SSMS) and connect to the affected instance.
  • Run the following T-SQL command to rebuild the problematic catalog:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • If the catalog is severely corrupted, drop and recreate it:
  DROP FULLTEXT CATALOG [YourCatalogName];
  CREATE FULLTEXT CATALOG [YourCatalogName] AS DEFAULT;

Step 4: Repair SQL Server Full-Text Component Registration

  • Launch SQL Server Installation Center from the Start Menu.
  • Select Maintenance > Repair, choose the affected instance, and allow the installer to fix corrupted Full-Text Search binaries.
  • Reboot the server once the repair completes to reinitialize the MSFTESQL interface.

Step 5: Check Windows Event Viewer for Underlying Errors

  • Open Event Viewer > Windows Logs > Application.
  • Filter for Source: MSSQLSERVER and cross-reference timestamps with Error 9920 occurrences.
  • Look for related errors (e.g., Event ID 7, 17055) indicating file corruption or access denial that may need separate remediation.

Alternative or Verification Steps

  • After applying fixes, run SELECT * FROM sys.fulltext_catalogs; in SSMS to confirm the catalog status shows as Online/Idle rather than Error.
  • If the issue persists, consider fully uninstalling and reinstalling the Full-Text and Semantic Extractions for Search feature via SQL Server Setup, then recreate catalogs and indexes from scratch.

How to fix Error 9919 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9919 — Fulltext DDL Command Failed (Single User Mode)

Why This Error Happens

This error occurs because SQL Server 2025 has been started in single-user mode (using the -m startup parameter), which reserves the sole available connection for administrative tasks like running DBCC commands or system-level repairs. Full-Text Search DDL operations (such as CREATE FULLTEXT INDEX or ALTER FULLTEXT CATALOG) internally require the Full-Text Gatherer service and background worker threads to establish their own separate connection to SQL Server. Since single-user mode blocks any additional connections beyond the current administrative session, the Full-Text engine cannot spawn its required internal connection, causing the DDL command to fail with Error 9919.

Step-by-Step Resolution Guide

Step 1: Verify the Current Startup Mode

  • Open SQL Server Configuration Manager (search for it in the Windows 11 / Windows Server 2025 Start Menu).
  • Navigate to SQL Server Services, right-click your instance (e.g., SQL Server (MSSQLSERVER)), and select Properties.
  • Check the Startup Parameters tab for the presence of -m or -f flags, which indicate single-user or minimal configuration mode.

Step 2: Remove the Single-User Startup Parameter

  • In the Startup Parameters field, select the -m parameter and click Remove.
  • Click Apply, then restart the SQL Server service for the change to take effect:
  net stop MSSQLSERVER
  net start MSSQLSERVER
  • If you started single-user mode via command line instead of Configuration Manager, simply stop that instance and restart it normally without the -m flag:
  NET START MSSQLSERVER

Step 3: Confirm Multi-User Mode Is Active

  • Open a new query window in SQL Server Management Studio (SSMS) and run:
  SELECT SERVERPROPERTY('IsSingleUser') AS SingleUserStatus;
  • A returned value of 0 confirms the instance is now running in standard multi-user mode.

Step 4: Re-run the Full-Text DDL Command

  • Execute your original Full-Text Search command again, for example:
  CREATE FULLTEXT CATALOG ftCatalog AS DEFAULT;
  CREATE FULLTEXT INDEX ON dbo.YourTable(YourColumn)
      KEY INDEX PK_YourTable
      ON ftCatalog;
  • Confirm the command completes without triggering Error 9919.

Step 5: Check the Full-Text Filter Daemon Launcher Service

  • Open Services.msc and ensure SQL Full-text Filter Daemon Launcher (MSSQLSERVER) is set to Automatic and is currently Running.
  • If stopped, start the service manually and retry the DDL command.

Alternative or Verification Steps

  • Verification: Query sys.fulltext_catalogs and sys.fulltext_indexes to confirm your catalog and index were created successfully after switching back to multi-user mode.
  • Alternative: If you specifically need single-user mode for maintenance (e.g., running DBCC CHECKDB with repair options), complete that maintenance task first, restart the instance normally, and only then execute any pending Full-Text DDL operations.

How to fix Error 9918 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9918 – Full-Text Catalog Uses FAT Volume

Why This Error Happens

This warning occurs because the full-text catalog has been placed on a volume formatted with the FAT or FAT32 file system, which lacks the security descriptor and transactional logging capabilities required by SQL Server. Specifically, FAT volumes do not support NTFS-level security permissions, which are necessary for SQL Server to apply access control lists (ACLs) to catalog files. Additionally, differential backups rely on NTFS change-tracking metadata (archive bits and USN journal support) that FAT/FAT32 simply does not provide.

Step-by-Step Resolution Guide

Step 1: Identify the Current File System of the Catalog Volume

  • Open File Explorer, right-click the drive hosting the full-text catalog, and select Properties to check the file system type.
  • Alternatively, run the following in PowerShell or Command Prompt:
  fsutil fsinfo volumeinfo D:
  • Confirm whether the output shows FAT32 or FAT instead of NTFS.

Step 2: Migrate the Full-Text Catalog to an NTFS Volume

  • Identify the current catalog path using the following T-SQL query:
  SELECT name, path FROM sys.fulltext_catalogs;
  • Create a new folder on an NTFS-formatted drive, e.g., E:\SQLData\FTCatalogs\.
  • Use the ALTER FULLTEXT CATALOG statement to rebuild on the new path, or drop and recreate the catalog:
  DROP FULLTEXT CATALOG YourCatalogName;
  CREATE FULLTEXT CATALOG YourCatalogName IN PATH 'E:\SQLData\FTCatalogs\';

Step 3: Reformat the Drive to NTFS (If Migration Is Not Feasible)

  • Back up all data on the target FAT/FAT32 volume before proceeding.
  • Use the convert command to change the file system without data loss:
  convert D: /fs:ntfs
  • Restart the SQL Server service after conversion completes to ensure the Database Engine recognizes the updated volume attributes.

Step 4: Rebuild and Repopulate the Full-Text Index

  • Once the catalog resides on NTFS, trigger a full population to rebuild the index data:
  ALTER FULLTEXT INDEX ON YourTableName START FULL POPULATION;
  • Monitor progress via SQL Server Management Studio (SSMS) under Object Explorer > Full-Text Indexes.

Alternative or Verification Steps

  • Verify the fix by re-running fsutil fsinfo volumeinfo <DriveLetter> to confirm the volume now reports NTFS, and check the SQL Server Error Log to ensure Error 9918 no longer appears during catalog population.
  • If reformatting or migration is not immediately possible, as a temporary workaround, exclude the catalog from differential backup jobs and rely solely on full backups until the underlying storage is corrected.

How to fix Error 9917 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9917 — Internal Error in Full-Text Docid Mapper

Why This Error Happens

Error 9917 occurs when the SQL Server full-text search engine encounters a corrupted or inconsistent docid mapping structure within the full-text catalog, typically caused by an improperly terminated population (crawl) process or underlying disk I/O corruption. This can also arise when the full-text index metadata becomes out of sync with the base table due to abrupt service restarts, storage failures, or filesystem-level corruption on the volume hosting the catalog files. In some cases, insufficient permissions on the full-text catalog directory under Windows Server 2025 can prevent proper read/write access to the docid mapping files, triggering this internal error.

Step-by-Step Resolution Guide

Step 1: Verify Full-Text Catalog and Index Status

  • Run the following query to check the status of the full-text catalog:
SELECT name, is_paused, crawl_type_desc, status_desc 
FROM sys.fulltext_catalogs fc
JOIN sys.dm_fts_index_population pop 
ON fc.fulltext_catalog_id = pop.database_id;
  • Confirm whether a crawl is currently stuck or reporting an error state.
  • Check the SQL Server Error Log (C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG) for related messages referencing the same table or catalog.

Step 2: Rebuild the Full-Text Catalog

  • Open SQL Server Management Studio (SSMS) and connect to the affected instance.
  • Execute the rebuild command to discard the corrupted docid mapping and regenerate it:
ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Follow the rebuild with a full population:
ALTER FULLTEXT INDEX ON [dbo].[YourTable] START FULL POPULATION;
  • Monitor progress using sys.dm_fts_index_population until the status_desc returns to IDLE.

Step 3: Check File System Permissions and Disk Health

  • Navigate to the full-text catalog storage path (default: C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA\) and confirm the SQL Server service account (e.g., NT Service\MSSQLSERVER) has Full Control permissions.
  • Run chkdsk C: /f in an elevated Command Prompt on Windows Server 2025 to rule out underlying disk corruption.
  • Restart the SQL Server service via services.msc or net stop MSSQLSERVER && net start MSSQLSERVER to clear any locked file handles.

Step 4: Drop and Recreate the Full-Text Index (If Rebuild Fails)

  • If the rebuild in Step 2 does not resolve the error, drop the full-text index entirely:
DROP FULLTEXT INDEX ON [dbo].[YourTable];
  • Recreate it using the original unique key index and language settings:
CREATE FULLTEXT INDEX ON [dbo].[YourTable] (ColumnName LANGUAGE 1033)
KEY INDEX PK_YourTable ON [YourCatalogName];
  • Start a full population immediately after creation to rebuild the docid mapper from scratch.

Alternative or Verification Steps

  • Verify the fix by querying sys.dm_fts_index_population to confirm the population completes with no errors and row_count matches the expected table row count.
  • If the error persists after rebuilding, restore the database from the last known good backup taken prior to the corruption event, then reapply full-text indexing from a clean state.

How to fix Error 9916 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9916 – Full-Text Population Reinitialization Failure

Why This Error Happens

Error 9916 typically occurs when SQL Server’s Full-Text Engine (MSFTESQL) loses connectivity to the underlying full-text catalog due to corrupted index fragments or an unexpected service interruption. This often stems from insufficient permissions on the Full-Text Data directory, abrupt termination of the Filter Daemon Host process (MSSQLFDLauncher), or disk I/O errors during a crawl. In Windows Server 2025 environments, this can also be triggered by Windows Defender or third-party antivirus software locking the catalog files during an active population.

Step-by-Step Resolution Guide

Step 1: Verify Filter Daemon Host Service Status

  • Open Services.msc on Windows Server 2025 and locate SQL Full-text Filter Daemon Launcher (MSSQLFDLauncher).
  • Ensure the service is running under the correct service account (typically NT Service\MSSQLFDLauncher$<InstanceName>).
  • Restart the service: net stop MSSQLFDLauncher$MSSQLSERVER followed by net start MSSQLFDLauncher$MSSQLSERVER.

Step 2: Rebuild the Full-Text Catalog

  • Connect via SQL Server Management Studio (SSMS) 21 and execute the following to identify the broken catalog:
  SELECT * FROM sys.fulltext_catalogs;
  • Run a full rebuild to clear corruption (Note: this requires a full repopulation afterward):
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Avoid using REORGANIZE for this specific error, as it will not resolve underlying index corruption.

Step 3: Check File System Permissions and Exclusions

  • Navigate to the Full-Text data directory (default path: C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData).
  • Verify that the SQL Server Service Account has Full Control permissions on this folder via the Security tab in File Explorer.
  • Add this directory to the exclusion list in Windows Defender (Virus & threat protection > Manage settings > Exclusions) to prevent file locking during the crawl.

Step 4: Restart the Population Manually

  • Once permissions are verified and the catalog is rebuilt, manually trigger a full population:
  ALTER FULLTEXT INDEX ON [YourTableName] START FULL POPULATION;
  • Monitor the SQL Server Error Log to ensure the “Fulltext Full population” start message appears without immediate failure.

Alternative or Verification Steps

  • Verification: Query the population status using SELECT FULLTEXTCATALOGPROPERTY('YourCatalogName', 'PopulateStatus');. A return value of 0 confirms the population is idle and successful (any value other than 1-6 indicates it is not currently crawling/erroring).
  • Alternative Fix: If the rebuild fails due to disk corruption, drop the full-text index entirely using DROP FULLTEXT INDEX ON [YourTableName], delete the orphaned catalog files from the FTData directory, and recreate the index from scratch using CREATE FULLTEXT INDEX.

How to fix Error 9915 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9915 – Full-Text Population Reinitialized

Why This Error Happens

Error 9915 occurs when SQL Server detects that the underlying table structure or full-text index metadata has changed in a way that invalidates the current full-text catalog population. This is commonly triggered by schema changes (adding/dropping columns tracked by the full-text index), a corrupted full-text catalog, or an abrupt termination of a previous population (crawl) due to service interruption. It can also happen after a database restore or attach operation where the full-text catalog files become out of sync with the table’s internal metadata.

Step-by-Step Resolution Guide

Step 1: Verify the Full-Text Catalog and Index Status

  • Open SQL Server Management Studio (SSMS) and connect to your SQL Server 2025 instance.
  • Run the following query to check population status:
SELECT * FROM sys.fulltext_indexes WHERE object_id = OBJECT_ID('YourTableName');
  • Check the crawl_type_desc and is_enabled columns for anomalies.

Step 2: Check SQL Server Error Logs and Event Viewer

  • On Windows Server 2025 / Windows 11, open Event Viewer > Applications and Services Logs > MSSQLSERVER.
  • Look for correlating errors around Event ID 9915, such as disk I/O failures or catalog corruption warnings.
  • Cross-reference with the SQL Server error log located at:
    C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Log\ERRORLOG

Step 3: Rebuild the Full-Text Catalog

  • If corruption is suspected, rebuild the catalog rather than waiting for auto-repopulation:
ALTER FULLTEXT CATALOG YourCatalogName REBUILD;
  • This forces a clean population cycle and clears any stale metadata causing the reinitialization loop.

Step 4: Manually Trigger a Full Population

  • If the rebuild does not resolve the issue, force a full crawl manually:
ALTER FULLTEXT INDEX ON YourTableName START FULL POPULATION;
  • Monitor progress using sys.dm_fts_index_population.

Step 5: Validate File System Permissions

  • Ensure the SQL Server service account has full read/write access to the Full-Text Catalog directory (default path under C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\FTData).
  • Right-click the folder > Properties > Security tab, and confirm NT SERVICE\MSSQLSERVER has Modify rights.

Alternative or Verification Steps

  • To verify the fix, query sys.dm_fts_index_population to confirm the population status shows Idle with no pending crawls, and check that Event ID 9915 no longer appears in new log entries.
  • If the error persists, consider dropping and recreating the full-text index entirely using DROP FULLTEXT INDEX followed by CREATE FULLTEXT INDEX, which resolves deeper metadata corruption that a simple rebuild cannot fix.

How to fix Error 9914 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9914 – Failed to Resume Full-Text Population in SQL Server 2025

Why This Error Happens

Error 9914 typically occurs when SQL Server attempts to resume a paused or interrupted full-text index population but cannot access the underlying full-text catalog files or metadata. This is often caused by corrupted full-text catalog files, insufficient permissions for the SQL Server service account on the catalog directory, or an inconsistent internal state left behind after an unexpected server shutdown or failed crawl. In some cases, this error also surfaces when the associated table or indexed view schema has changed while a population was still marked as active in the system metadata.

Step-by-Step Resolution Guide

Step 1: Verify Full-Text Catalog and Service Account Permissions

  • Open SQL Server Configuration Manager and confirm the SQL Server service account has Full Control on the full-text catalog folder (typically under C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData).
  • Right-click the folder, go to Properties > Security, and add the service account if missing.
  • Restart the SQL Server service after applying permission changes.

Step 2: Check the Status of the Full-Text Index

  • Run the following query to inspect the current population status:
SELECT * FROM sys.dm_fts_index_population WHERE database_id = DB_ID('YourDatabaseName');
  • If the status shows as “paused” or “throttled” unexpectedly, this confirms a stuck population state.
  • Cross-reference the table/indexed view ID from the error message using:
SELECT OBJECT_NAME(object_id) FROM sys.tables WHERE object_id = <table_or_indexed_view_ID>;

Step 3: Rebuild the Full-Text Catalog

  • Disable and re-enable full-text indexing on the affected table to clear any corrupted internal state:
ALTER FULLTEXT INDEX ON YourTableName DISABLE;
ALTER FULLTEXT INDEX ON YourTableName ENABLE;
  • If the issue persists, drop and recreate the full-text catalog entirely:
DROP FULLTEXT INDEX ON YourTableName;
DROP FULLTEXT CATALOG YourCatalogName;
CREATE FULLTEXT CATALOG YourCatalogName;
CREATE FULLTEXT INDEX ON YourTableName(...) KEY INDEX YourPrimaryKeyIndex;

Step 4: Restart the Full-Text Population Manually

  • Force a full population restart using:
ALTER FULLTEXT INDEX ON YourTableName START FULL POPULATION;
  • Monitor progress via SQL Server Management Studio under Database > Storage > Full Text Catalogs.

Step 5: Check Windows Event Viewer and SQL Server Error Logs

  • Open Event Viewer on Windows Server 2025 / Windows 11 and navigate to Applications and Services Logs > MSSQLSERVER.
  • Look for related I/O errors, disk corruption warnings, or access denial events around the same timestamp as Error 9914.

Alternative or Verification Steps

  • After applying fixes, re-run the sys.dm_fts_index_population query to confirm the status changes to “idle” or “completed” rather than “error” or “paused.”
  • If the error persists after rebuilding the catalog, consider restoring the database from a known good backup, as this may indicate deeper corruption in the database’s full-text metadata structures.

How to fix Error 9913 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9913 – Resuming Full-Text Population

Why This Error Happens

Error 9913 is an informational message indicating that SQL Server 2025 is resuming a previously paused or interrupted full-text index population process. This typically occurs after a service restart, a failover in an Always On Availability Group, or a system resource constraint (such as low memory or disk I/O throttling) that caused the full-text crawl to pause. While not a critical error in itself, frequent occurrences may indicate underlying instability with the Full-Text Search service or disk subsystem.

Step-by-Step Resolution Guide

Step 1: Verify Full-Text Service Status

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER) and confirm the status is “Running.”
  • If stopped, right-click and select Start, then set Startup Type to Automatic.

Step 2: Check Full-Text Catalog Health

  • Open SQL Server Management Studio (SSMS) and connect to the instance.
  • Run the following query to check population status:
  SELECT * FROM sys.dm_fts_index_population;
  • If the population is stuck in a “Paused” state, manually resume it:
  ALTER FULLTEXT INDEX ON [YourTable] RESUME POPULATION;

Step 3: Review System Resource Constraints

  • Open Task Manager or Resource Monitor to check for memory pressure or high disk latency during the crawl window.
  • Check the SQL Server error log (C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG) for repeated pause/resume cycles.
  • Increase the max server memory setting if the instance is memory-starved, via:
  EXEC sp_configure 'max server memory', 8192;
  RECONFIGURE;

Step 4: Rebuild the Full-Text Catalog (If Corruption Suspected)

  • If populations repeatedly fail to complete, drop and recreate the catalog:
  DROP FULLTEXT INDEX ON [YourTable];
  DROP FULLTEXT CATALOG [YourCatalogName];
  • Recreate the catalog and index using CREATE FULLTEXT CATALOG and CREATE FULLTEXT INDEX statements, then allow the full population to complete.

Alternative or Verification Steps

  • Verify the fix by querying sys.fulltext_indexes and confirming the crawl_type_desc shows “FULL” or “INCREMENTAL” with a status of “Idle” once population completes.
  • If the issue persists across reboots, consider migrating the full-text catalog to a dedicated, high-performance disk volume to eliminate I/O-related pausing.

How to fix Error 9912 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9912 – Failed to Initialize Full-Text Population

Why This Error Happens

Error 9912 typically occurs when the SQL Server Full-Text Filter Daemon Launcher (MSSQLFDLauncher) service is stopped, disabled, or running under an account with insufficient permissions. This error can also arise when the full-text catalog files are corrupted, misconfigured, or located on a path that the service account cannot access. Additionally, a mismatch between the SQL Server service account and the full-text indexing component permissions on the database files often triggers this failure.

Step-by-Step Resolution Guide

Step 1: Verify and Restart the Full-Text Filter Daemon Launcher Service

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLFDLauncher).
  • Ensure the Startup Type is set to Automatic.
  • Right-click and select Restart. If it fails to start, check the Windows Event Viewer under Applications and Services Logs > MSSQLSERVER for dependency errors.

Step 2: Check Service Account Permissions

  • Confirm the account running MSSQLFDLauncher has the same or compatible permissions as the SQL Server Database Engine service account.
  • Navigate to SQL Server Configuration Manager > SQL Server Services.
  • Right-click SQL Full-text Filter Daemon Launcher, go to Properties > Log On tab, and verify the account credentials are correct and not locked out.
  • Apply changes and restart the service for them to take effect.

Step 3: Rebuild the Full-Text Catalog

  • Open SQL Server Management Studio (SSMS) and connect to the instance.
  • Run the following T-SQL command to drop and recreate the catalog:
ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • If the catalog is severely corrupted, drop it entirely and recreate it:
DROP FULLTEXT CATALOG [YourCatalogName];
CREATE FULLTEXT CATALOG [YourCatalogName] AS DEFAULT;

Step 4: Validate File System Permissions

  • Navigate to the full-text catalog folder, typically located at:
    C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData
  • Right-click the folder, go to Properties > Security, and ensure the SQL Server service account has Full Control.
  • Apply changes and restart the SQL Server Database Engine service.

Step 5: Re-populate the Full-Text Index

  • In SSMS, run the population command to force a fresh crawl:
ALTER FULLTEXT INDEX ON [YourTableName] START FULL POPULATION;
  • Monitor progress in sys.dmftsindex_population to confirm the population completes without error.

Alternative or Verification Steps

  • Query sys.fulltext_indexes and check the crawl_type and status_description columns to confirm the population status shows “Idle” rather than “Failed” or “Error.”
  • If the issue persists, use SQL Server Configuration Manager to completely uninstall and reinstall the Full-Text and Semantic Extractions for Search component via the SQL Server Installation Center, then restart the services and attempt the population again.

How to fix Error 9911 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9911 — Full-Text Population Initialized

Why This Error Happens

Error 9911 is actually an informational message, not a true error, that SQL Server 2025 logs whenever a full-text index population (full, incremental, or background) begins on a table or indexed view. It typically surfaces in logs because the Full-Text Engine for the given catalog is starting a crawl, often triggered automatically after large data changes, index rebuilds, or a service restart. While harmless on its own, it can mask underlying issues such as a stuck or looping population caused by a corrupted full-text catalog, insufficient permissions on the Full-Text Gatherer service account, or filter/word-breaker component conflicts following a Windows Server 2025 or Windows 11 update.

Step-by-Step Resolution Guide

Step 1: Confirm Whether This Is Expected Behavior

  • Check SQL Server Error Log and Windows Event Viewer (Application log) for the exact timestamp of Event ID 9911.
  • Correlate the timestamp with recent activity: bulk inserts, index rebuilds, catalog creation, or a SQL Server service restart.
  • Run the following to see current population status:
  SELECT fts.name, fc.population_status, fc.name AS catalog_name
  FROM sys.fulltext_indexes fts
  JOIN sys.fulltext_catalogs fc ON fts.fulltext_catalog_id = fc.fulltext_catalog_id;

Step 2: Verify Full-Text Service and Permissions

  • Open Services.msc on Windows Server 2025 / Windows 11 and confirm SQL Full-text Filter Daemon Launcher (MSSQLSERVER) is running.
  • Ensure the service account has Log on as a service rights and read/write access to:
    C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData
  • Restart the service if it was recently patched or updated:
  Restart-Service MSSQLFDLauncher

Step 3: Rebuild the Full-Text Catalog If Population Is Stuck

  • If population status stays at “in progress” indefinitely, rebuild the catalog:
  ALTER FULLTEXT CATALOG YourCatalogName REBUILD;
  • This clears potential corruption in the catalog files and forces a clean full population.
  • Monitor progress using sys.dm_fts_index_population.

Step 4: Check for Word Breaker or Filter Conflicts

  • Run EXEC sp_help_fulltext_system_components 'filter'; to confirm no missing or mismatched filters after a Windows Server 2025 update.
  • Reinstall or update the Microsoft Filter Pack if any filters show as “Not Loaded.”
  • Restart the SQL Server instance after filter pack reinstallation.

Step 5: Review SQL Server and OS Patch Compatibility

  • Confirm your SQL Server 2025 build is fully patched via SELECT @@VERSION;.
  • Cross-reference with Microsoft’s support matrix for Windows Server 2025 / Windows 11 compatibility, since early builds have had Full-Text Engine threading issues.
  • Apply the latest Cumulative Update (CU) if population repeatedly stalls or restarts unexpectedly.

Alternative or Verification Steps

  • Run SELECT * FROM sys.dm_fts_index_population; — an empty result set confirms population has completed successfully with no errors.
  • If the issue persists after a catalog rebuild, drop and recreate the full-text index entirely using DROP FULLTEXT INDEX followed by CREATE FULLTEXT INDEX, then re-run population from scratch.

How to fix Error 9910 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9910 – Full-Text Population Failure in SQL Server 2025

Why This Error Happens

Error 9910 typically occurs when the SQL Server Full-Text Filter Daemon Host (MSSQLFDLauncher) process encounters corrupted index fragments, insufficient permissions on the full-text catalog directory, or a crashed IFilter component while attempting to crawl and populate the index. This can also stem from a mismatch between the document type being indexed and the installed filter/word breaker, or from the full-text catalog files becoming corrupted due to an unexpected service interruption. In Windows Server 2025 environments, stricter default service account permissions often block the Full-Text engine from accessing the underlying data files.

Step-by-Step Resolution Guide

Step 1: Verify Full-Text Service Status and Permissions

  • Open Services.msc and confirm that “SQL Full-Text Filter Daemon Launcher (MSSQLFDLauncher)” is running under the correct service instance.
  • Ensure the service account has Read/Write permissions on the SQL Server data directory (typically C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA).
  • Run the following T-SQL command to check the current population status:
  SELECT * FROM sys.dm_fts_index_population;

Step 2: Rebuild the Corrupted Full-Text Catalog

  • Identify the affected catalog using sys.fulltext_catalogs.
  • Execute a full rebuild to clear any corrupted fragments rather than attempting an incremental update:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Wait for the rebuild to complete, then manually trigger a full population:
  ALTER FULLTEXT INDEX ON [dbo].[YourTable] START FULL POPULATION;

Step 3: Update or Reset the IFilters

  • Navigate to the Registry Editor and check the loaded filters at:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSearch\CLSID
  • If the table contains specific document types (PDF, DOCX), ensure the correct third-party or Microsoft Office IFilters are installed and registered correctly for the SQL Server 2025 64-bit architecture.
  • Restart the SQL Server (MSSQLSERVER) and MSSQLFDLauncher services to force the engine to reload the filter DLLs.

Step 4: Check Windows Event Viewer for Underlying I/O Errors

  • Open the Windows Event Viewer and navigate to Applications and Services Logs > Microsoft > Windows > SQL Server.
  • Look for correlating Error 09210 or disk I/O warnings that might indicate the root cause is a failing disk sector rather than a software configuration issue.
  • If I/O errors are present, run CHKDSK /F on the volume hosting the SQL data files during the next scheduled maintenance window.

Alternative or Verification Steps

  • Verification: Run SELECT FULLTEXTCATALOGPROPERTY('YourCatalogName', 'PopulateStatus'); and confirm the return value is 0 (Idle), indicating the population completed successfully without errors.
  • Alternative: If the catalog remains corrupted after rebuilding, drop the full-text index entirely using DROP FULLTEXT INDEX ON [dbo].[YourTable] and recreate it from scratch using the CREATE FULLTEXT INDEX wizard in SSMS to ensure a clean schema binding.

How to fix Error 9909 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9909 – Full-Text Catalog Status Change Failure

Why This Error Happens

Error 9909 typically occurs when SQL Server 2025 cannot modify the state of a full-text catalog due to underlying file system permission issues or catalog corruption. This often happens when the SQL Server Service Account lacks the necessary NTFS permissions on the Full-Text Data directory, or when the catalog files have become orphaned or corrupted following an improper shutdown, disk failure, or failed upgrade from a previous SQL Server version. Additionally, this can occur if the Full-Text Filter Daemon Launcher service is stopped or unresponsive, preventing the Database Engine from communicating the status change to the catalog.

Step-by-Step Resolution Guide

Step 1: Verify the Full-Text Filter Daemon Launcher Service

  • Open Services.msc on your Windows Server 2025 / Windows 11 machine.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER) and ensure the status is set to “Running.”
  • If the service is stopped, right-click and select Start. If it fails to start, check the service account credentials under the Log On tab.

Step 2: Audit File System Permissions

  • Navigate to the physical location of your Full-Text data, typically found at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData.
  • Right-click the FTData folder, select Properties, and navigate to the Security tab.
  • Ensure the SQL Server Service Account (e.g., NT Service\MSSQLSERVER) has Full Control permissions applied recursively to this directory.
  • Apply the changes and restart the SQL Server service to force a permission re-read.

Step 3: Rebuild the Corrupted Full-Text Catalog

  • Open SQL Server Management Studio (SSMS) and connect to the instance reporting the error.
  • Execute the following T-SQL command to force a rebuild, replacing the catalog name as needed:
  USE [YourDatabaseName];
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • If the rebuild command hangs, drop the specific full-text index associated with the catalog and recreate it from scratch using CREATE FULLTEXT INDEX.

Step 4: Check Disk Space and Volume Health

  • Verify that the volume hosting the FTData directory has sufficient free space (at least 20% free is recommended for index operations).
  • Run chkdsk /f on the specific volume via an elevated Command Prompt to rule out underlying disk corruption that might be blocking file handle changes.

Alternative or Verification Steps

  • Verify the Fix: Query the status using SELECT * FROM sys.fulltext_catalogs; to ensure the is_importing and is_paused columns return 0, confirming the catalog is active and healthy.
  • Alternative Solution: If the catalog remains corrupted despite a rebuild, perform a full DROP FULLTEXT CATALOG followed by a CREATE FULLTEXT CATALOG command, then repopulate the index using ALTER FULLTEXT INDEX ON [TableName] START FULL POPULATION.

How to fix Error 9908 on Windows Server 2025 / Windows 11

Why This Error Happens

Error 9908 is not actually a failure condition; it is an informational state-change notification logged by SQL Server whenever a full-text catalog transitions between states such as ONLINE, OFFLINE, REBUILDING, or RECOVERING. This typically occurs during routine operations like catalog rebuilds, population (crawl) cycles, database attach/restore operations, or when SQL Server automatically recovers a full-text catalog after a service restart. Because it is logged as informational, it does not indicate corruption or permission failure by itself, but repeated or unexpected occurrences can signal an underlying issue with the full-text index population process or disk I/O latency affecting the catalog files.

Step-by-Step Resolution Guide

Step 1: Confirm the Message Is Informational

  • Open SQL Server Management Studio (SSMS) and check the SQL Server Error Log (Management > SQL Server Logs).
  • Verify the message severity level; Error 9908 is logged at a low severity and explicitly states “No user action is required.”
  • Cross-reference the timestamp with any recent full-text index rebuild, database restore, or service restart to confirm it correlates with an expected operation.

Step 2: Check Full-Text Catalog and Index Status

  • Run the following query to inspect current catalog health:
  SELECT name, is_enabled, data_space_id 
  FROM sys.fulltext_catalogs;
  • Run this to check population status:
  SELECT fulltext_catalog_id, status, status_description 
  FROM sys.dm_fts_index_population;
  • If status_description shows anything other than “Idle” or “Completed” for an extended period, the catalog may be stuck mid-crawl.

Step 3: Rebuild the Full-Text Catalog (If Stuck or Repeating Frequently)

  • If the status flips repeatedly (e.g., cycling between OFFLINE and RECOVERING), rebuild the catalog manually:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • On Windows Server 2025 / Windows 11, ensure the SQL Full-text Filter Daemon Launcher (MSSQLFDLauncher) service is running via services.msc or:
  Get-Service MSSQLFDLauncher | Start-Service

Step 4: Validate Disk and File Permissions

  • Navigate to the full-text catalog file path, typically:
    C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\
  • Confirm the SQL Server service account (e.g., NT Service\MSSQLSERVER) has Full Control permissions on this folder.
  • Check disk health/latency using Perfmon (Physical Disk > Avg. Disk sec/Read) to rule out I/O delays causing the catalog to flap between states.

Step 5: Review SQL Server Configuration Manager Settings

  • Open SQL Server Configuration Manager and confirm the Full-Text service startup type is set to Automatic.
  • Restart the SQL Server instance service cleanly if the catalog remains in a non-idle state after rebuild:
  Restart-Service MSSQLSERVER -Force

Alternative or Verification Steps

  • Re-run SELECT * FROM sys.dm_fts_index_population; after 5–10 minutes to confirm the catalog status has settled into “Idle,” verifying the transition completed successfully.
  • If the message persists without resolving on its own, drop and recreate the full-text index and catalog entirely as a fallback:
  DROP FULLTEXT INDEX ON [YourTable];
  DROP FULLTEXT CATALOG [YourCatalogName];

Then recreate both using CREATE FULLTEXT CATALOG and CREATE FULLTEXT INDEX.

How to fix Error 9907 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9907 — Full-Text Catalog Item Limit Exceeded

Why This Error Happens

Error 9907 occurs when a full-text catalog in SQL Server 2025 has reached or exceeded the maximum number of indexed items supported by a single catalog, which can happen on large tables with extensive full-text indexed columns. This typically arises when full-text catalogs are not partitioned properly across multiple catalogs, causing a single catalog to accumulate an unsustainable volume of indexed data. Additionally, fragmented or improperly maintained full-text indexes can inflate the item count artificially, triggering this threshold prematurely even when actual data volume should be within limits.

Step-by-Step Resolution Guide

Step 1: Identify the Affected Catalog and Database

  • Run the following query to pinpoint the catalog ID and database ID referenced in the error: SELECT name, fulltext_catalog_id FROM sys.fulltext_catalogs;
  • Cross-reference the database ID using SELECT DB_NAME(<database_id>); in SQL Server Management Studio (SSMS).
  • Check the current item count via sys.dm_fts_index_population to confirm how close you are to the limit.

Step 2: Rebuild or Repartition the Full-Text Catalog

  • Create a new full-text catalog to split the load: CREATE FULLTEXT CATALOG ft_catalog_new AS DEFAULT;
  • Move large full-text indexed tables to the new catalog using ALTER FULLTEXT INDEX ON <table_name> SET FULLTEXT CATALOG ft_catalog_new;
  • Rebuild the index after reassignment: ALTER FULLTEXT INDEX ON <table_name> START FULL POPULATION;

Step 3: Clean Up and Optimize Existing Indexes

  • Remove unused or redundant full-text indexed columns to reduce the overall item count: ALTER FULLTEXT INDEX ON <table_name> DROP (<column_name>);
  • Run ALTER FULLTEXT CATALOG <catalog_name> REORGANIZE; to defragment and optimize storage.
  • Restart the SQL Server Full-Text service via services.msc on Windows Server 2025 to clear any cached population data (SQL Full-text Filter Daemon Launcher).

Step 4: Adjust Indexing Strategy for Large Tables

  • For extremely large tables, consider partitioning the table itself at the database level using CREATE PARTITION FUNCTION and CREATE PARTITION SCHEME to reduce per-catalog item density.
  • Apply incremental population instead of full population going forward: ALTER FULLTEXT INDEX ON <table_name> SET CHANGE_TRACKING AUTO;

Alternative or Verification Steps

  • Verify the fix by re-running the population process (ALTER FULLTEXT INDEX ON <table_name> START FULL POPULATION;) and confirming no Error 9907 appears in the SQL Server Error Log (viewable via SSMS > Management > SQL Server Logs).
  • If the error persists, use sp_fulltext_catalog to validate catalog status and consider upgrading to table partitioning with multiple dedicated full-text catalogs to permanently distribute the indexing load.

How to fix Error 9906 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9906 – Full-Text Catalog Monitor State

Why This Error Happens

Error 9906 is an informational message generated by the Full-Text Catalog Monitor background process, which periodically reports the current operational state (such as IDLE, PAUSED, RECOVERING, or BUILDING) of a full-text catalog within a database. This message does not indicate corruption or failure; it is simply SQL Server’s internal mechanism for logging catalog population and health status to the error log. It typically appears alongside catalog population events, index rebuilds, or during routine full-text indexing operations, and only becomes a concern if the reported state remains stuck in an unexpected condition (like PAUSED or RECOVERING) for an extended period.

Step-by-Step Resolution Guide

Step 1: Confirm the Message Is Informational

  • Open SQL Server Management Studio (SSMS) and check the SQL Server Error Log under Management > SQL Server Logs.
  • Verify that Error 9906 is logged with a severity level of 0 or 10, confirming it is informational and not a system-breaking error.
  • Note the catalog name, database name, and reported state (%ls) from the message text for further investigation.

Step 2: Check the Actual Full-Text Catalog State

  • Run the following T-SQL query to inspect the real-time status of the catalog:
SELECT name, is_paused, crawl_type, crawl_start_date, crawl_end_date
FROM sys.fulltext_indexes AS fi
JOIN sys.fulltext_catalogs AS fc ON fi.fulltext_catalog_id = fc.fulltext_catalog_id;
  • If the state shows PAUSED or RECOVERING unexpectedly, proceed to repair the catalog rather than ignoring the log entry.

Step 3: Rebuild or Reorganize the Full-Text Catalog (If State Is Abnormal)

  • Use SSMS or T-SQL to rebuild the affected catalog:
ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • For minor inconsistencies, reorganize instead of a full rebuild to save time:
ALTER FULLTEXT CATALOG [YourCatalogName] REORGANIZE;
  • Ensure the SQL Server service account has read/write permissions to the full-text data directory, typically located at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\.

Step 4: Restart the Full-Text Filter Daemon Launcher Service

  • On Windows Server 2025 or Windows 11, open Services.msc and locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER).
  • Restart the service to clear any stuck crawl threads or locked catalog handles.
  • Confirm the service is running under an account with appropriate database engine access, not just a local service account.

Alternative or Verification Steps

  • Re-run SELECT * FROM sys.dm_fts_index_population; to confirm no active or stalled population operations remain for the catalog in question.
  • If the 9906 message persists with an abnormal state after rebuilding, drop and recreate the full-text index entirely using DROP FULLTEXT INDEX followed by CREATE FULLTEXT INDEX to rule out underlying metadata corruption.

How to fix Error 9905 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9905 – Full-Text Indexer Status Change

Why This Error Happens

Error 9905 is an informational message, not a critical failure, generated when the Full-Text Search (FTS) indexer changes the state of a catalog (e.g., from “In Progress” to “Idle” or “Paused”). This typically occurs during normal population cycles, but frequent or unexpected status flapping can indicate underlying issues such as a corrupted full-text catalog, insufficient disk I/O throughput, or the SQL Server Full-Text Filter Daemon Launcher service being interrupted. In rare cases, it points to permission issues on the catalog’s underlying filegroup files preventing a clean population completion.

Step-by-Step Resolution Guide

Step 1: Verify the Full-Text Service Status

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Confirm SQL Full-text Filter Daemon Launcher (MSSQLSERVER) is running.
  • Restart the service if it is stopped or in a “Starting” hung state:
  net stop MSSQLFDLauncher
  net start MSSQLFDLauncher

Step 2: Check Catalog Health via T-SQL

  • Run the following query to inspect the catalog’s current population status:
  SELECT name, is_enabled, population_status 
  FROM sys.fulltext_catalogs fc
  JOIN sys.dm_fts_index_population ip ON fc.fulltext_catalog_id = ip.catalog_id;
  • If population_status shows “4” (paused) or “6” (incremental populating) indefinitely, proceed to rebuild the catalog.

Step 3: Rebuild the Full-Text Catalog

  • Execute a full rebuild to clear any corruption causing frequent status changes:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Follow this with a full population:
  ALTER FULLTEXT INDEX ON [YourTable] START FULL POPULATION;

Step 4: Validate File System Permissions

  • Navigate to the Full-Text Catalog data folder (default path: C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\DATA\).
  • Ensure the SQL Server service account has Full Control permissions on this directory.
  • Apply changes and restart the SQL Server service:
  net stop MSSQLSERVER
  net start MSSQLSERVER

Alternative or Verification Steps

  • Check the SQL Server Error Log (via SSMS > Management > SQL Server Logs) to confirm the status now reads “Idle” consistently without repeated flapping messages.
  • If the issue persists, run DBCC CHECKDB on the associated database to rule out underlying data corruption affecting the full-text indexer’s ability to stabilize.

How to fix Error 9904 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9904 – Full-Text Catalog Remount in SQL Server 2025

Why This Error Happens

Error 9904 occurs when SQL Server’s full-text search engine detects internal inconsistencies in a full-text catalog, triggering an automatic remount to self-heal. This is typically caused by corrupted full-text index files on disk, an unexpected SQL Server service shutdown during an active population (crawl), or underlying storage/filesystem issues (such as disk errors or antivirus interference) that disrupt the catalog’s internal structures. In some cases, insufficient permissions on the full-text catalog directory can also prevent proper read/write operations, triggering recovery attempts.

Step-by-Step Resolution Guide

Step 1: Check the SQL Server Error Log for Root Cause Details

  • Open SQL Server Management Studio (SSMS) and navigate to Management > SQL Server Logs.
  • Look for the specific “Reason code” and “Error” message accompanying Event ID 9904 to identify whether it’s an I/O error, access violation, or population failure.
  • Cross-reference the reason code with Windows Event Viewer (Windows Logs > Application) for correlating disk or service-level errors.

Step 2: Verify Disk Health and File Permissions

  • Confirm the full-text catalog file path (typically under C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\) is accessible and not flagged by antivirus real-time scanning.
  • Run chkdsk C: /f /r from an elevated Command Prompt to rule out disk corruption, scheduling a restart if required.
  • Ensure the SQL Server service account (e.g., NT Service\MSSQLSERVER) has Full Control permissions on the FTData directory via Properties > Security.

Step 3: Rebuild the Full-Text Catalog

  • In SSMS, right-click the affected database, go to Storage > Full-Text Catalogs, and select the problematic catalog.
  • Run the following T-SQL command to force a rebuild:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Once rebuilt, repopulate the index with:
  ALTER FULLTEXT CATALOG [YourCatalogName] START FULL POPULATION;

Step 4: Restart the Full-Text Filter Daemon Launcher Service

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER) and restart it to clear any stuck processes.
  • Confirm the service startup type is set to Automatic to prevent future manual intervention.

Alternative or Verification Steps

  • After rebuilding, run SELECT * FROM sys.fulltext_catalogs; and check the is_fulltext_enabled and population_status columns to confirm the catalog is healthy and fully populated.
  • If the error persists frequently, consider dropping and recreating the full-text index entirely using DROP FULLTEXT INDEX followed by CREATE FULLTEXT INDEX, which resolves deeper corruption not fixed by a standard rebuild.

How to fix Error 9903 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9903 – Full-Text Catalog Health Monitor Failure

Why This Error Happens

Error 9903 occurs when the full-text catalog health monitor detects an interruption or corruption during the population (crawl) process of a full-text catalog. This is commonly caused by abrupt I/O failures on the disk hosting the catalog files, insufficient permissions for the SQL Server service account on the full-text catalog directory, or orphaned filter daemon host (FDHost) processes that crashed mid-population. Additionally, corrupted full-text index fragments or a mismatch between the catalog metadata and the physical files can trigger this reason code.

Step-by-Step Resolution Guide

Step 1: Verify Service Account Permissions

  • Navigate to the full-text data directory, typically located at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData.
  • Right-click the folder, go to Properties > Security, and ensure the SQL Server service account (e.g., NT Service\MSSQLSERVER) has Full Control.
  • Restart the SQL Server service via services.msc or run net stop MSSQLSERVER && net start MSSQLSERVER in an elevated Command Prompt.

Step 2: Check and Restart the Filter Daemon Host Process

  • Open Task Manager or use Get-Process -Name "fdhost" in PowerShell to check if the fdhost.exe process is hung or missing.
  • If found unresponsive, terminate it using taskkill /F /IM fdhost.exe.
  • SQL Server will automatically spawn a new instance of the daemon host on the next population request.

Step 3: Rebuild the Full-Text Catalog

  • Open SQL Server Management Studio (SSMS) and connect to the instance reporting the error.
  • Run the following T-SQL command to force a clean rebuild, replacing the placeholder with your actual catalog name:
ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD;
  • Monitor the sys.fulltext_catalogs view to ensure the population_status changes from 1 (In Progress) to 0 (Idle) upon completion.

Step 4: Validate Disk Health and File Integrity

  • Run CHKDSK C: /F /R (adjusting the drive letter as needed) during a scheduled maintenance window to rule out underlying disk corruption.
  • Ensure Windows Server 2025 Defender or third-party antivirus software is not locking or scanning the FTData folder in real-time, as this can interrupt the crawl process.

Alternative or Verification Steps

  • Verify the Fix: Query the dynamic management view using SELECT * FROM sys.dm_fts_index_population; to confirm the population has completed successfully with no active rows for the affected catalog.
  • Alternative Solution: If the rebuild fails repeatedly, drop the full-text index and catalog entirely using DROP FULLTEXT INDEX and DROP FULLTEXT CATALOG, then recreate them from scratch to eliminate any underlying metadata corruption.

How to fix Error 9902 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9902 – Full-Text Catalog Low on System Resources

Why This Error Happens

Error 9902 occurs when SQL Server’s Full-Text Engine detects insufficient system resources—typically memory, disk space, or worker threads—to continue populating or crawling a full-text catalog. This is commonly triggered by memory pressure from the MSFTESQL filter daemon host process, low disk space on the volume hosting the catalog files, or an excessive number of concurrent full-text population operations competing for the same resource pool. The pause is a self-protective mechanism, not a corruption, but repeated occurrences usually point to an underlying resource ceiling (memory limits, disk quota, or thread starvation) that needs to be addressed.

Step-by-Step Resolution Guide

Step 1: Check Available Disk Space and Catalog File Location

  • Navigate to the full-text catalog directory, typically under C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\FTData\.
  • Confirm at least 20% free space remains on the drive hosting the catalog; low disk space is a top trigger for reason code 2 in this error.
  • If space is low, move the catalog to a different filegroup/drive using ALTER FULLTEXT CATALOG [CatalogName] REBUILD after relocating via ALTER DATABASE ... MODIFY FILE.

Step 2: Review and Adjust Memory Allocation for Full-Text Engine

  • Open SQL Server Management Studio (SSMS) and run sp_configure 'max server memory (MB)' to verify SQL Server isn’t starved of memory for the MSFTESQL filter host.
  • Check Windows Task Manager or Performance Monitor (perfmon.exe) for memory pressure on sqlservr.exe and fdhost.exe processes.
  • If running on a constrained VM in Windows Server 2025, increase allocated RAM or lower max server memory to leave headroom (recommend at least 2-4 GB free for OS and FTE operations).

Step 3: Reduce Concurrent Population Load

  • Check how many full-text indexes are populating simultaneously using:
  SELECT * FROM sys.dm_fts_index_population;
  • Stagger population jobs instead of running full population on multiple large tables at once.
  • Use ALTER FULLTEXT INDEX ON [TableName] SET CHANGE_TRACKING MANUAL to control when crawls occur, avoiding resource spikes during peak hours.

Step 4: Restart the Full-Text Filter Daemon Host Service

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Locate SQL Full-text Filter Daemon Launcher (MSSQLSERVER) and restart it.
  • This clears any stuck threads or memory leaks within the fdhost.exe process without requiring a full SQL Server restart.

Step 5: Review SQL Server Error Log for Reason Code Details

  • Open the SQL Server Error Log via SSMS (Management > SQL Server Logs) or the raw file at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG.
  • Cross-reference the specific “Reason code” number reported in Error 9902 against Microsoft’s documentation to confirm whether it’s memory (1), disk (2), or thread pool (3) related.
  • Apply the targeted fix from Steps 1-4 based on the confirmed reason code.

Alternative or Verification Steps

  • Verify the fix by querying SELECT * FROM sys.dm_fts_index_population; and confirming the status_description shows “In progress” or “Idle” rather than “Paused” for an extended period.
  • If the error persists after resource remediation, rebuild the entire catalog as a last resort: ALTER FULLTEXT CATALOG [CatalogName] REBUILD WITH ACCENT_SENSITIVITY = ON; and monitor the error log during the subsequent crawl.

How to fix Error 9901 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9901 – Full-Text Catalog Low on Disk Space

Why This Error Happens

Error 9901 occurs when the volume hosting a full-text catalog’s files runs critically low on available disk space, causing SQL Server to automatically pause all active population (crawl) operations to prevent catalog corruption. This is a protective mechanism rather than a true failure state, triggered when free space drops below the internal threshold SQL Server requires to safely write index fragments during population. It can also occur if the catalog’s underlying filegroup or drive has hit a hard capacity limit, or if disk quotas (common in Windows Server 2025 storage spaces configurations) are restricting growth.

Step-by-Step Resolution Guide

Step 1: Identify the Affected Volume and Catalog

  • Run the following query to locate the catalog and its file path:
  SELECT name, data_space_id, is_default 
  FROM sys.fulltext_catalogs;
  • Cross-reference data_space_id with sys.filegroups and sys.database_files to find the physical disk path.
  • Check free space on that volume via File Explorer or Get-PSDrive in PowerShell.

Step 2: Free Up or Expand Disk Space

  • Delete unnecessary files, old backups, or temporary SQL Server dump files (.mdmp, .log) from the same volume.
  • If using a virtual disk (common on Windows Server 2025 Hyper-V hosts), expand the VHDX via:
  Resize-VHD -Path "D:\VMs\SQLData.vhdx" -SizeBytes 500GB
  • Alternatively, move the full-text catalog to a drive with more capacity using:
  ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD 
  AS DEFAULT;

(ensure the new filegroup points to the larger volume first).

Step 3: Resume Paused Population

  • Once space is available, manually resume the paused full population:
  ALTER FULLTEXT INDEX ON [YourTable] RESUME POPULATION;
  • Confirm SQL Server Agent or any automated maintenance jobs aren’t simultaneously consuming disk space during the resume.

Step 4: Adjust Disk Quotas (If Applicable)

  • Open Server Manager > File and Storage Services > Volumes on Windows Server 2025.
  • Check for active Quota Management policies (via FSRM) that may be throttling the SQL Server service account’s storage allocation on that volume.
  • Increase or remove the quota limit tied to the SQL Server data directory.

Alternative or Verification Steps

  • Verify the fix by checking SQL Server Error Log or running SELECT * FROM sys.dm_fts_index_population; to confirm population status has returned to “Idle” or “Completed” rather than “Paused.”
  • If space constraints persist, consider migrating the full-text catalog to a dedicated SSD volume with Storage Spaces Direct (S2D) to isolate it from other I/O-heavy database operations.

How to fix Error 9847 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9847 – Fuzzy String Matching Collation Mismatch

Why This Error Happens

This error occurs because SQL Server’s fuzzy string matching functions (such as PREDICT or similarity-based string functions) rely on linguistic comparison algorithms that are only compatible with Windows collations. SQL* collations (e.g., SQL_Latin1_General_CP1_CI_AS) use legacy sort order rules designed for backward compatibility with older SQL Server versions, which lack the Unicode-aware comparison weights required by fuzzy matching algorithms. As a result, when a database, column, or query uses a SQL* collation, the fuzzy matching engine cannot parse the comparison rules and throws Error 9847.

Step-by-Step Resolution Guide

Step 1: Identify the Current Collation Settings

  • Run the following query to check the server-level collation:
  • SELECT SERVERPROPERTY('Collation');
  • Run this query to check the database-level collation:
  • SELECT DATABASEPROPERTYEX('YourDatabaseName', 'Collation');
  • Check column-level collation if the issue is isolated to a specific table:
  • SELECT name, collation_name FROM sys.columns WHERE object_id = OBJECT_ID('YourTableName');

Step 2: Change the Database Collation to a Windows Collation

  • Pick an equivalent Windows collation (e.g., replace SQL_Latin1_General_CP1_CI_AS with Latin1_General_100_CI_AS_SC).
  • Run the ALTER DATABASE command:
  • ALTER DATABASE YourDatabaseName COLLATE Latin1_General_100_CI_AS_SC;
  • If the issue is at the column level, alter the specific column instead:
  • ALTER TABLE YourTableName ALTER COLUMN YourColumnName NVARCHAR(100) COLLATE Latin1_General_100_CI_AS_SC;

Step 3: Update Query-Level Collation Overrides

  • If the fuzzy matching function is called directly in a query, add an explicit COLLATE clause to force a Windows collation at runtime.
  • Example: SELECT * FROM YourTable WHERE PREDICT(Column1, Column2) > 0.8 COLLATE Latin1_General_100_CI_AS_SC;
  • Ensure any linked servers or external data sources referenced in the query also use Windows collations to avoid mismatch errors during joins.

Step 4: Restart the SQL Server Service to Apply Changes

  • Open Services.msc on Windows Server 2025 / Windows 11.
  • Locate SQL Server (MSSQLSERVER) or your named instance.
  • Right-click and select Restart to ensure collation changes are fully loaded into memory.

Alternative or Verification Steps

  • Re-run the original fuzzy matching query that triggered Error 9847; if it executes without throwing the collation error, the fix was successful.
  • If changing the database collation is not feasible due to existing dependencies, create a computed column or temporary table using COLLATE Latin1_General_100_CI_AS_SC solely for the fuzzy matching operation, leaving the original schema untouched.

How to fix Error 9845 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9845 – Fuzzy String Matching Sort Weight Conversion Failure

Why This Error Happens

This error occurs when SQL Server’s fuzzy string matching engine cannot convert input strings into sort weights, typically due to a corrupted or mismatched collation definition file used by the SORT_WEIGHTS internal mapping tables. It can also arise from database-level collation settings that conflict with the server-level collation, especially after an in-place upgrade to SQL Server 2025 on Windows Server 2025 or Windows 11. In some cases, this is triggered by Unicode normalization issues when the input string contains unsupported or malformed characters that the fuzzy matching algorithm cannot weight-map correctly.

Step-by-Step Resolution Guide

Step 1: Verify Collation Consistency Across Database and Server

  • Run SELECT DATABASEPROPERTYEX('YourDBName', 'Collation'); and compare it against SELECT SERVERPROPERTY('Collation');.
  • Confirm both are using a supported Windows collation (e.g., Latin1_General_100_CI_AS_SC_UTF8) rather than a legacy SQL collation incompatible with fuzzy matching.
  • If mismatched, document the discrepancy before proceeding to realignment.

Step 2: Rebuild or Repair the Collation Resource Files

  • Navigate to C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn\ and verify that qds_collation.dll and related sort-weight resource files are not flagged as corrupted by Windows File Integrity checks.
  • Run sfc /scannow from an elevated Command Prompt on Windows Server 2025 / Windows 11 to repair any corrupted system-level dependencies.
  • Restart the SQL Server service via services.msc or net stop MSSQLSERVER && net start MSSQLSERVER.

Step 3: Alter the Database Collation to a Fuzzy-Match Compatible Setting

  • Execute the following, adjusting for your required language setting:
ALTER DATABASE YourDBName
COLLATE Latin1_General_100_CI_AI_SC_UTF8;
  • Ensure no active connections are using the database during this operation by first running ALTER DATABASE YourDBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE;.
  • Revert to MULTI_USER mode once the alteration completes successfully.

Step 4: Sanitize Input Strings Feeding the Fuzzy Match Function

  • Check the source column/input string for non-standard Unicode characters using SELECT YourColumn FROM YourTable WHERE YourColumn LIKE '%[^\x00-\x7F]%' ESCAPE '\'; style filtering.
  • Strip or normalize problematic characters using TRANSLATE() or REPLACE() functions prior to calling the fuzzy matching function.

Alternative or Verification Steps

  • Re-run the original fuzzy matching query (e.g., using PREDICT or the FUZZY_STRING_MATCH function) against a known clean dataset to confirm Error 9845 no longer appears.
  • If the error persists, as an alternative, drop and recreate the affected database’s collation-dependent indexes, since stale index metadata can sometimes retain outdated sort-weight references even after a collation change.

How to fix Error 9844 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9844 – Unsupported Collation in UNISTR Function

Why This Error Happens

This error occurs because the UNISTR function in SQL Server 2025 strictly requires that any char or varchar input parameter be encoded using a UTF-8 enabled collation. When a column, variable, or literal string is passed into UNISTR using a legacy, non-UTF8 collation (such as a standard Latin1General or SQLLatin1 collation without the _UTF8 suffix), the database engine cannot guarantee the correct interpretation of the byte sequence as Unicode. Consequently, the engine rejects the operation to prevent data corruption or incorrect character mapping.

Step-by-Step Resolution Guide

Step 1: Identify the Current Collation of the Input

  • Determine which specific column or variable is throwing the error by isolating the UNISTR call in your query.
  • Run the following T-SQL command to check the collation of a specific column:
  • SELECT name, collation_name FROM sys.columns WHERE object_id = OBJECT_ID('YourTableName') AND name = 'YourColumnName';
  • Look for a collation name that does not contain the string UTF8 (e.g., SQL_Latin1_General_CP1_CI_AS).

Step 2: Modify the Column or Variable to Use a UTF8 Collation

  • If the issue is with a table column, alter the table to use a UTF8-compatible collation. Note that this operation requires sufficient disk space as it rewrites the table data.
  • Example command to alter a table column:
  • ALTER TABLE YourTableName ALTER COLUMN YourColumnName VARCHAR(100) COLLATE Latin1_General_100_CI_AS_SC_UTF8;
  • If the issue involves a local variable or inline string literal, declare the variable explicitly with the UTF8 collation or use the COLLATE clause directly within the function call.

Step 3: Apply a COLLATE Clause Directly in the Query (Temporary Fix)

  • If altering the underlying table schema is not immediately feasible, wrap the input directly inside the UNISTR function call using an inline COLLATE statement.
  • Example syntax: SELECT UNISTR(YourColumn COLLATE Latin1_General_100_CI_AS_SC_UTF8) FROM YourTable;
  • This forces the specific query execution to treat the input as UTF-8 without altering the physical database schema.

Step 4: Verify Database-Level Collation Settings

  • Check if the entire database default collation is outdated for Windows Server 2025 environments.
  • Navigate to SQL Server Management Studio (SSMS) > Right-click the Database > Properties > Options tab to view the “Collation” dropdown.
  • If running a fresh install, consider setting the database default collation to a UTF8 variant during the initial setup to avoid this error globally.

Alternative or Verification Steps

  • Verification: Re-run the original query containing the UNISTR function. If the fix was successful, the query will return the converted Unicode string output instead of throwing Error 9844.
  • Alternative: If altering production column collations is too risky, cast the input explicitly to NVARCHAR before processing it, as UNISTR handles native Unicode types without requiring the specific UTF8 collation check.

How to fix Error 9843 on Windows Server 2025 / Windows 11

Why This Error Happens

Error 9843 occurs when a Transact-SQL function (such as STRING_ESCAPE or a custom Unicode escape sequence operation) receives an invalid escape character parameter. SQL Server 2025 strictly validates that the escape character argument must be exactly one character in length and fall within the printable ASCII range (U+0020 to U+007E, hex 0x20 to 0x7E). This typically happens due to a coding error where a multi-character string, an empty string, a NULL value, or a non-printable/extended Unicode character is passed where a single valid ASCII character is expected.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Query or Stored Procedure

  • Check the SQL Server Error Log or Extended Events session for the exact query text that triggered Error 9843.
  • Run the following to capture recent errors if Extended Events isn’t already configured:
SELECT TOP 50 * FROM sys.fn_xe_file_target_read_file('system_health*.xel', NULL, NULL, NULL)
WHERE object_name = 'error_reported' AND event_data LIKE '%9843%';
  • Note the application or job (SSIS package, stored procedure, or ad-hoc script) that executed the statement.

Step 2: Inspect the Escape Character Parameter in the Code

  • Open the identified script and locate the function call passing the escape character argument (commonly seen in custom JSON parsing logic or newer Unicode-aware string functions).
  • Confirm the parameter is a single character literal, e.g. '\' or '^', not a multi-character string like '\\' or an empty string ''.
  • Verify the character falls within U+0020–U+007E (standard printable ASCII: space through tilde ~). Characters like é, ™, tab (\t), or newline (\n) will fail validation.

Step 3: Correct the Parameter and Add Input Validation

  • Replace the invalid value with a valid single ASCII character, for example:
SELECT STRING_ESCAPE(@jsonValue, 'json'); -- ensure any custom escape char param is valid
  • If the escape character is dynamically generated (from user input, config table, or application variable), add a validation check before execution:
IF LEN(@EscapeChar) <> 1 OR UNICODE(@EscapeChar) NOT BETWEEN 0x0020 AND 0x007E
BEGIN
    RAISERROR('Invalid escape character supplied.', 16, 1);
    RETURN;
END
  • Update any configuration tables or application settings files (e.g., appsettings.json, SSIS package variables) that may be feeding bad values into the query.

Step 4: Rebuild and Test the Stored Procedure or Script

  • Drop and recreate the affected stored procedure or function using ALTER PROCEDURE/ALTER FUNCTION to ensure the compiled plan reflects the corrected logic.
  • Clear the procedure cache for the object if testing in a non-production environment:
DBCC FREEPROCCACHE;
  • Re-run the original query or job that previously failed to confirm the 9843 error no longer appears.

Alternative or Verification Steps

  • Run the corrected statement manually in SQL Server Management Studio (SSMS) or Azure Data Studio and confirm it executes without raising Error 9843.
  • If the error persists, enable SQL Server Profiler or Extended Events to trace the exact runtime value being passed to the escape character parameter — this often reveals hidden whitespace or encoding issues (e.g., UTF-16 surrogate pairs) not visible in the raw source code.

How to fix Error 9842 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9842 – Invalid Unicode Escape Character

Why This Error Happens

Error 9842 occurs when SQL Server’s JSON_MODIFY, STRING_ESCAPE, or OPENJSON functions encounter a Unicode escape sequence that doesn’t conform to the \uXXXX format (exactly four hexadecimal digits following the backslash-u). This typically happens when application code concatenates malformed strings, when data imported from external sources (CSV, flat files, or legacy systems) contains truncated or corrupted escape sequences, or when a collation/encoding mismatch causes byte-level corruption during data transfer. In SQL Server 2025, this is more commonly surfaced due to stricter JSON parsing validation introduced in the native JSON data type handling.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Query and Data Source

  • Enable query logging via Extended Events to capture the exact T-SQL statement triggering Error 9842.
  • Use the following session to trace it:
  CREATE EVENT SESSION [Capture9842] ON SERVER
  ADD EVENT sqlserver.error_reported(
      WHERE ([error_number]=(9842)))
  ADD TARGET package0.event_file(SET filename=N'C:\Temp\Capture9842.xel');
  ALTER EVENT SESSION [Capture9842] ON SERVER STATE = START;
  • Review C:\Temp\Capture9842.xel using SQL Server Management Studio (SSMS) to pinpoint the exact input string.

Step 2: Validate and Sanitize the JSON/String Input

  • Check the source string for malformed sequences like \u12 (incomplete) or \uZZZZ (non-hex characters).
  • Run a validation check before processing:
  IF ISJSON(@YourJsonVariable) = 0
      PRINT 'Invalid JSON structure detected';
  • If the data originates from an external ETL pipeline, inspect the source file encoding (UTF-8 vs UTF-16) using Notepad++ or a hex editor to confirm no byte corruption occurred during transfer.

Step 3: Correct the Application-Level String Escaping

  • Update the client application (C#, Python, PowerShell, etc.) to properly escape backslashes before sending data to SQL Server.
  • In C#, ensure strings use JsonConvert.SerializeObject() or System.Text.Json rather than manual string concatenation.
  • If using PowerShell for data imports on Windows Server 2025, verify the script uses:
  [System.Text.Encoding]::UTF8.GetString($byteArray)
  • Re-run the import/query after correcting the escape sequence format.

Step 4: Apply SQL Server Cumulative Update

  • Confirm you are running the latest Cumulative Update (CU) for SQL Server 2025, as early releases had stricter-than-necessary JSON parsing that has since been patched.
  • Check your current build:
  SELECT @@VERSION;
  • Download and apply the latest CU from the Microsoft Update Catalog if your build number is below the current patch level.

Alternative or Verification Steps

  • Re-execute the original query or stored procedure after remediation; confirm no Error 9842 is raised and ISJSON() returns 1 for all processed records.
  • As a fallback, wrap the JSON parsing logic in a TRY...CATCH block with STRING_ESCAPE(@input, 'json') applied proactively to sanitize data before it reaches native JSON functions.

How to fix Error 9841 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9841 – Invalid Unicode Escape Sequence

Why This Error Happens

Error 9841 occurs when SQL Server’s JSON or string parsing engine encounters a malformed Unicode escape sequence within a \uXXXX or \U+XXXXXX formatted string, typically inside a JSON_MODIFY, JSON_VALUE, or OPENJSON function call. This is usually caused by improperly escaped backslashes in application-generated JSON payloads, incorrect encoding when data is passed from client drivers, or manual string concatenation that fails to double-escape backslash characters before insertion. It can also surface after upgrading to SQL Server 2025 if legacy T-SQL scripts relied on looser parsing behavior from earlier engine versions.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Query and Input String

  • Enable SQL Server extended events or check the application log to capture the exact T-SQL statement that triggered Error 9841.
  • Run the query manually in SQL Server Management Studio (SSMS) against Windows Server 2025 / Windows 11 to reproduce the error in isolation.
  • Inspect the JSON string being passed for stray single backslashes (e.g., \u without four valid hex digits, or \U+ without six valid hex digits).

Step 2: Correct the Unicode Escape Formatting

  • Ensure every Unicode escape uses exactly four hexadecimal characters after \u (e.g., \u00e9), or exactly six after \U+ (e.g., \U+0001F600).
  • If the string originates from an application layer (C#, Python, Node.js), verify the serializer is double-escaping backslashes before sending to SQL Server — a raw backslash in JSON must be represented as \\.
  • Use SELECT ISJSON('your_string_here') in SSMS to validate the JSON structure before running JSON_MODIFY or OPENJSON against it.

Step 3: Patch or Update SQL Server 2025 Components

  • Check Start > SQL Server 2025 Configuration Manager or run SELECT @@VERSION; to confirm the current build number.
  • Navigate to C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log on Windows Server 2025 and review the ERRORLOG for related JSON parser warnings.
  • Apply the latest Cumulative Update (CU) from Microsoft Update Catalog, as early builds of SQL Server 2025 had stricter (but sometimes buggy) JSON parsing validation that has been refined in subsequent patches.

Step 4: Sanitize Input Data at the Source

  • Add a pre-processing step in your application or ETL pipeline (SSIS, Azure Data Factory, or custom scripts) to strip or re-encode invalid escape sequences before data reaches SQL Server.
  • For PowerShell-based import scripts on Windows 11, use [System.Text.RegularExpressions.Regex]::Replace() to validate \u sequences against the pattern \\u[0-9A-Fa-f]{4} prior to insertion.

Alternative or Verification Steps

  • Re-run the original failing query in SSMS; a successful execution with no Error 9841 confirms the fix. Additionally, run SELECT ISJSON(column_name) FROM table_name WHERE ISJSON(column_name) = 0; to catch any remaining malformed rows in bulk.
  • If the error persists after correcting escape sequences, temporarily bypass native JSON functions and use OPENJSON with an explicit schema (WITH clause) to isolate whether the issue is in parsing logic or in the underlying data itself.

How to fix Error 9840 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9840 — APPROX_PERCENTILE Row Limit Exceeded

Why This Error Happens

This error occurs because the APPROX_PERCENTILE function uses an internal approximation algorithm (t-digest) that has a hard-coded limit on the number of rows it can process in a single group. When a query attempts to calculate a percentile across an entire large table or a very large partition without sufficient filtering, the engine exceeds this internal buffer threshold and aborts the operation. This is not a permissions or configuration issue, but rather a data volume and query design limitation specific to SQL Server 2025’s implementation of approximate aggregate functions.

Step-by-Step Resolution Guide

Step 1: Analyze the Query Structure

  • Open SQL Server Management Studio (SSMS) and locate the specific query causing Error 9840.
  • Check if the APPROX_PERCENTILE_CONT or APPROX_PERCENTILE_DISC function is being applied to the entire table without a WHERE clause.
  • Identify the total row count of the target table using SELECT COUNT(*) FROM YourTable; to confirm if it exceeds standard high-volume thresholds (typically relevant above hundreds of millions of rows depending on distribution).

Step 2: Implement a GROUP BY Clause

  • Modify the query to include a GROUP BY clause on a relevant dimension (e.g., Region, Date, or CustomerID) to break the dataset into smaller, logical chunks.
  • Example syntax: SELECT Region, APPROX_PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY SalesAmount) FROM Sales GROUP BY Region;
  • Ensure the grouping column has an appropriate index to maintain performance after the logical change.

Step 3: Add Restrictive Predicates (WHERE Clause)

  • If grouping is not feasible for the business logic required, add a WHERE clause to filter the dataset by a specific date range or status flag.
  • Example: Restrict the query to WHERE OrderDate >= '2025-01-01' to reduce the active row set being passed to the function.
  • Test the query in a staging environment on Windows Server 2025 to confirm the row count now falls within the internal processing limit.

Step 4: Partition the Data Logically

  • For massive datasets that cannot be filtered by business logic, consider using a Common Table Expression (CTE) to pre-aggregate or sample the data before running the percentile function.
  • Use TABLESAMPLE for exploratory data analysis if exact precision is not required: SELECT * FROM YourTable TABLESAMPLE (10 PERCENT);
  • Re-run the APPROX_PERCENTILE function on the sampled or pre-filtered subset to validate the row limit is respected.

Alternative or Verification Steps

  • Verification: Execute the modified query with the SET STATISTICS IO ON command to confirm the query completes successfully and review the execution plan to ensure the row estimates per group are significantly lower than the previous failed attempt.
  • Alternative: If precise group boundaries are required without a GROUP BY, consider migrating the specific calculation to PERCENTILE_CONT (the exact function) within an OVER() clause, though be aware this requires more computational resources (CPU/Memory) than the approximate version.

How to fix Error 9839 on Windows Server 2025 / Windows 11

Why This Error Happens

Error 9839 is a severe internal consistency error that occurs when the SQL Server Storage Engine detects corruption in a bitmap structure, typically within allocation pages (GAM, SGAM, or PFS pages) or internal index metadata. The set_bit function expects a boolean value (0 or 1) to flip a specific bit, and receiving any other value indicates that the underlying page or memory buffer has been corrupted due to disk I/O failures, faulty hardware, or improper shutdowns. This is rarely a configuration issue and almost always points to physical or logical database corruption that requires immediate attention.

Step-by-Step Resolution Guide

Step 1: Isolate the Database and Check Physical Integrity

  • Take the affected database offline or restrict access using ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; to prevent further writes.
  • Check the Windows Event Viewer (System and Application logs) for underlying Disk, NTFS, or Controller errors (Event ID 7, 11, or 51) that may correlate with the SQL error timestamp.
  • Run chkdsk /f on the volume hosting the .mdf and .ldf files to rule out file system level corruption.

Step 2: Run DBCC CHECKDB to Identify Scope of Corruption

  • Open SQL Server Management Studio (SSMS) or sqlcmd and execute:
  • DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
  • Review the output specifically for errors related to Object ID or Page ID tied to the bitmap/allocation structures.
  • Note whether the corruption is isolated to a non-clustered index (easier fix) or a clustered index/heap (requires restore).

Step 3: Repair or Restore Based on Findings

  • If corruption is limited to a non-clustered index, run: DBCC CHECKDB ('YourDatabaseName', REPAIR_REBUILD); to attempt a safe fix without data loss.
  • If the error points to critical system pages or clustered data, the safest route is restoring from the last known good backup: RESTORE DATABASE [YourDB] FROM DISK = 'E:\Backups\YourDB_Full.bak' WITH NORECOVERY;
  • Avoid using REPAIR_ALLOW_DATA_LOSS unless a verified backup is unavailable, as this will delete corrupted pages to resolve the bit mismatch.

Step 4: Verify Hardware Stability

  • Check the Windows Server 2025 Storage Spaces configuration or RAID controller firmware for pending updates if this is a bare-metal deployment.
  • Ensure “Disk Write Caching” is disabled on the volume if there is no battery-backed cache, as this is a common cause of set_bit allocation errors during unexpected power loss.

Alternative or Verification Steps

  • After repair or restore, immediately re-run DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS; to confirm the output returns “0 allocation errors and 0 consistency errors.”
  • If the error recurs immediately after a clean CHECKDB, run SQLIOSim or Windows Memory Diagnostic Tool to rule out faulty RAM or a failing storage controller as the root hardware cause.

How to fix Error 9838 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9838

Why This Error Happens

Error 9838 occurs when a built-in or user-defined function receives a parameter value that falls outside its acceptable boundary range, often triggered by corrupted query execution plans, incompatible function calls after an upgrade, or malformed input data passed through linked server queries. This can also surface when internal SQL Server system functions encounter unexpected metadata due to database corruption or a mismatched compatibility level after migrating to SQL Server 2025. In rarer cases, outdated CLR assemblies or third-party extended stored procedures pass invalid parameter indexes that exceed the function’s defined limits.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Query and Function

  • Check the SQL Server Error Log located at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG for the full error context, including the function name and parameter index.
  • Run DBCC INPUTBUFFER(<session_id>) to capture the exact query that triggered the error if it occurred in an active session.
  • Cross-reference the function name against Microsoft’s documentation to confirm the expected parameter range (e.g., 0 to N).

Step 2: Validate Database Compatibility Level

  • Open SQL Server Management Studio (SSMS) and run:
  SELECT name, compatibility_level FROM sys.databases;
  • If the database was migrated from an older version, update it to match SQL Server 2025 standards:
  ALTER DATABASE [YourDatabaseName] SET COMPATIBILITY_LEVEL = 170;
  • Restart the SQL Server service via services.msc or net stop MSSQLSERVER && net start MSSQLSERVER to apply changes cleanly.

Step 3: Run Database Consistency Checks

  • Execute a full integrity check to rule out corruption:
  DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
  • If errors are returned, review repair options (REPAIR_REBUILD before REPAIR_ALLOW_DATA_LOSS) and back up the database first.
  • Check %TEMP% and C:\Windows\Temp for disk space issues, as insufficient space during check processes can trigger parameter miscalculations.

Step 4: Update SQL Server and CLR Components

  • Verify your SQL Server 2025 build number by running SELECT @@VERSION; and compare it against the latest Cumulative Update (CU) on the Microsoft Update Catalog.
  • Apply the latest CU via the SQL Server Installation Center if outdated.
  • If using custom CLR functions, disassemble and recompile the assembly to ensure compatibility:
  ALTER ASSEMBLY [YourAssemblyName] FROM 'C:\Path\To\UpdatedAssembly.dll';

Step 5: Review Linked Server and Query Parameters

  • If the error originates from a linked server query, verify provider settings under SSMS > Server Objects > Linked Servers > Properties.
  • Ensure parameterized queries explicitly cast values to match expected data types and ranges, avoiding implicit conversions that can push indexes out of bounds.

Alternative or Verification Steps

  • Re-run the original query or stored procedure that triggered Error 9838 and confirm it executes without exceptions; monitor the Error Log for 30 minutes to ensure no recurrence.
  • If the issue persists after applying CUs and compatibility fixes, restore the database from a pre-corruption backup to a test instance and compare execution plans to isolate the specific object causing the parameter mismatch.

How to fix Error 9837 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9837 – Invalid Date Value Out of Range

Why This Error Happens

Error 9837 occurs when SQL Server encounters a date value during a data operation (such as restoring a database, running DBCC CHECKDB, replication, or bulk import) that falls below the minimum allowable value for the target date/datetime data type. This is typically caused by data corruption in a database page, an improperly converted date value during migration from another system, or a mismatch between source and destination schema when the source contains sentinel values (like 0000-00-00 from MySQL) that are incompatible with SQL Server’s datetime, date, or smalldatetime minimum thresholds (e.g., January 1, 1753 for datetime). It can also surface on Windows Server 2025 / Windows 11 environments after an OS-level locale or regional date format change causes SQL Server to misinterpret incoming date strings.

Step-by-Step Resolution Guide

Step 1: Identify the Source of the Invalid Date Value

  • Run DBCC CHECKDB('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS; to rule out physical corruption on date-containing pages.
  • Check the specific table and column referenced in the SQL Server error log (Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG) for the operation that triggered Error 9837.
  • If this occurred during a bulk insert, import, or ETL job, inspect the source file or source system for placeholder/sentinel date values.

Step 2: Correct or Sanitize the Offending Data

  • If migrating from MySQL or another system, replace invalid placeholders like 0000-00-00 or 1/1/0001 with NULL or a valid minimum date (e.g., 1753-01-01 for datetime).
  • Use a staging table with a VARCHAR date column first, then apply a TRY_CONVERT or TRY_CAST statement to filter bad rows before inserting into the production table:
  SELECT * FROM StagingTable WHERE TRY_CONVERT(datetime, DateColumn) IS NULL;
  • Update or delete the offending rows once identified, or map them to NULL if the column allows it.

Step 3: Verify Windows Regional and Locale Settings

  • On Windows Server 2025 / Windows 11, open Settings > Time & Language > Language & Region and confirm the system locale matches the SQL Server instance’s configured language/collation.
  • Check SQL Server’s default language setting via:
  EXEC sp_configure 'default language';
  • Ensure the application connection string is not passing ambiguous date formats (e.g., DD/MM/YYYY vs MM/DD/YYYY) that could be misparsed near date boundaries.

Step 4: Use the Correct Data Type for the Date Range Needed

  • If your data legitimately requires dates earlier than January 1, 1753, migrate the column from datetime/smalldatetime to date (minimum: January 1, 0001) using:
  ALTER TABLE YourTable ALTER COLUMN YourDateColumn date;
  • Confirm no application-side code still issues implicit conversions that assume datetime boundaries.

Alternative or Verification Steps

  • Re-run the original operation (restore, bulk import, or query) that triggered Error 9837 and confirm it completes without raising the error in the SQL Server ERRORLOG or Windows Event Viewer.
  • As an alternative, if the invalid data resides in a legacy backup you cannot immediately edit, restore the database to a scratch instance, run cleanup scripts against the copy, then re-import or re-point the application to the sanitized dataset.

How to fix Error 9836 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9836 – APPROX_PERCENTILE Function Failure

Why This Error Happens

Error 9836 occurs when the SQL Server query processor encounters an internal fault while computing the APPROX_PERCENTILE_CONT or APPROX_PERCENTILE_DISC aggregate, typically due to corrupted intermediate statistics structures used for the approximation algorithm. This can also result from insufficient tempdb space, as the function relies on temporary data structures to build percentile estimates. Additionally, outdated Query Optimizer hotfixes or a corrupted plan cache entry referencing this newer SQL Server 2025 function can trigger the fault.

Step-by-Step Resolution Guide

Step 1: Clear the Plan Cache and Retry the Query

  • Open SQL Server Management Studio (SSMS) and connect to the affected instance.
  • Run DBCC FREEPROCCACHE; to remove potentially corrupted cached execution plans.
  • Re-execute the query containing APPROX_PERCENTILE_CONT or APPROX_PERCENTILE_DISC to see if the error persists.

Step 2: Verify and Expand tempdb Capacity

  • Navigate to SSMS > Databases > System Databases > tempdb > Properties.
  • Confirm tempdb files have adequate free space and autogrowth is not restricted (recommended: set autogrowth in fixed MB increments, not percentage).
  • Run the following to check current tempdb file usage:
  EXEC sp_spaceused;
  • Increase initial tempdb file size if disk space allows, under File Properties.

Step 3: Apply the Latest Cumulative Update (CU)

  • Check your current build version with:
  SELECT @@VERSION;
  • Download and install the latest Cumulative Update for SQL Server 2025 from the official Microsoft Download Center.
  • Restart the SQL Server service via Services.msc or net stop MSSQLSERVER followed by net start MSSQLSERVER.

Step 4: Rebuild Statistics on Affected Tables

  • Identify the table(s) referenced in the failing query.
  • Run the following to refresh statistics used by the approximation engine:
  UPDATE STATISTICS [YourTableName] WITH FULLSCAN;
  • Re-run the original query to confirm the error no longer triggers.

Step 5: Enable Trace Flag for Legacy Cardinality Estimation (If Issue Persists)

  • As a temporary workaround, enable Trace Flag 9481 to revert to the legacy cardinality estimator for the session:
  DBCC TRACEON(9481, -1);
  • Test the query again to confirm whether the newer estimator logic is causing the conflict.

Alternative or Verification Steps

  • To verify the fix, run the original APPROX_PERCENTILE query three consecutive times under load to ensure the error does not intermittently reappear.
  • As an alternative, replace APPROX_PERCENTILE_CONT/DISC with the standard PERCENTILE_CONT/DISC function temporarily to confirm whether the issue is isolated specifically to the approximation algorithm versus a broader query processor fault.

How to fix Error 9835 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9835 – Date Bucket Calculation Overflow in SQL Server 2025

Why This Error Happens

Error 9835 occurs when SQL Server’s date bucketing functions (such as DATE_BUCKET) attempt to calculate an interval boundary that exceeds the valid range of the datetime2 or date data type, typically due to an extremely large bucket width parameter combined with a wide date range. This can also happen when the origin date parameter is set too far from the source column’s actual values, forcing SQL Server to iterate beyond the maximum representable date (9999-12-31). Corrupted statistics or incorrect data type casting on the target column can further compound the miscalculation during query optimization.

Step-by-Step Resolution Guide

Step 1: Review the DATE_BUCKET Query Syntax

  • Open the query or stored procedure referencing the %ls column mentioned in the error message.
  • Check the bucket width (number) parameter — ensure it is a reasonable value (e.g., 1-1000) rather than an excessively large integer.
  • Verify the syntax follows: DATE_BUCKET(datepart, number, date_column, origin).

Step 2: Validate the Origin Date Parameter

  • Confirm the origin argument is a realistic date within the supported range (0001-01-01 through 9999-12-31).
  • If no origin is specified, SQL Server defaults to 1900-01-01 — ensure this default doesn’t conflict with far-future or far-past data in your column.
  • Explicitly set a safe origin, for example:
  SELECT DATE_BUCKET(day, 7, OrderDate, '2020-01-01') FROM Sales.Orders;

Step 3: Check Column Data Type and Range

  • Run the following to inspect the min/max values in the affected column:
  SELECT MIN(OrderDate), MAX(OrderDate) FROM Sales.Orders;
  • Ensure the column’s data type (date, datetime2, datetime) matches the expected range and isn’t storing out-of-bound or malformed values from ETL imports.
  • Cast or clean any erroneous rows with dates near the datetime2 boundary (e.g., year 9999).

Step 4: Update Statistics and Rebuild Indexes

  • Outdated statistics can cause the query optimizer to miscalculate bucket ranges during execution plans.
  • Run:
  UPDATE STATISTICS Sales.Orders;
  ALTER INDEX ALL ON Sales.Orders REBUILD;
  • Restart the SQL Server service via Windows Services (services.msc) if statistics corruption is suspected at the engine level.

Alternative or Verification Steps

  • After applying fixes, re-run the original query in SQL Server Management Studio (SSMS) and confirm Error 9835 no longer appears in the Messages tab.
  • If the error persists, apply the latest Cumulative Update (CU) for SQL Server 2025 from the Microsoft Update Catalog, as this may be a known engine-level bug with large bucket calculations on Windows Server 2025/Windows 11 builds.

How to fix Error 9834 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9834 – Invalid Bucket Width Value in date_bucket Function

Why This Error Happens

This error occurs when the date_bucket() function in SQL Server 2025 receives a number parameter that is zero, negative, or an invalid data type that cannot be implicitly converted to a positive integer. The date_bucket function strictly requires the bucket width argument to be a positive integer value greater than zero, as it determines how the date/time ranges are grouped. This typically stems from dynamic SQL generating incorrect values, application-layer logic passing unvalidated user input, or a variable being miscalculated (e.g., resulting in a negative number due to faulty subtraction logic) before being passed into the function.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Query

  • Check the SQL Server Error Log or Extended Events session to capture the exact T-SQL statement that triggered Error 9834.
  • Look specifically for the date_bucket function call within stored procedures or application-generated queries.
  • Use the following command to review recent errors if logging is enabled: EXEC sp_readerrorlog 0, 1, 'date_bucket';

Step 2: Validate the Bucket Width Parameter

  • Inspect the variable or literal passed as the first argument (number) in the function syntax: date_bucket (datepart, number, date, origin).
  • Ensure the value is not 0 or a negative integer (e.g., change DATE_BUCKET(day, -1, OrderDate) to DATE_BUCKET(day, 1, OrderDate)).
  • If the value is derived from a user input field or application variable, add a validation check to ensure it defaults to 1 if the calculated value is ≤ 0.

Step 3: Correct Implicit Conversion Issues

  • Verify that the data type of the “number” argument is an integer type (tinyint, smallint, int, or bigint).
  • If the value is being passed as a string (varchar) or a decimal, update the query to explicitly cast it: CAST(@BucketWidth AS INT).
  • Check for locale-specific formatting issues (e.g., commas or periods) that might cause a conversion error resulting in a negative or zero value.

Step 4: Update Application Logic and Stored Procedures

  • If the error originates from a specific application (e.g., a reporting tool or custom dashboard), navigate to the business logic layer where the bucket width is calculated.
  • Patch the code to include a GREATEST(1, @CalculatedValue) logic wrapper (or equivalent CASE statement in T-SQL) to prevent zero or negative values from ever reaching the database engine.
  • Redeploy the updated stored procedure using SQL Server Management Studio (SSMS) or Azure Data Studio.

Alternative or Verification Steps

  • Verification: Re-run the specific query or refresh the application report that previously failed; confirm that SQL Server returns the bucketed date results instead of throwing Error 9834.
  • Alternative: If the input value cannot be controlled at the source, wrap the function call in a TRY_CONVERT or IIF statement within the SQL script to catch invalid values before they are passed to the date_bucket function, defaulting to a safe value (e.g., 1) to prevent the query from failing.

How to fix Error 9833 on Windows Server 2025 / Windows 11

Why This Error Happens

Error 9833 occurs when SQL Server 2025 encounters a byte sequence that does not conform to the expected character encoding (typically UTF-8) for a column, parameter, or data file being processed. This is most commonly caused by a mismatch between the database’s collation encoding settings and the actual encoding of incoming data, such as importing a Latin-1 or ANSI file into a UTF-8-enforced column. It can also result from corrupted data pages, a damaged BCP/flat file, or a client driver sending malformed multi-byte sequences during an INSERT or BULK INSERT operation.

Step-by-Step Resolution Guide

Step 1: Identify the Source of the Malformed Data

  • Check the SQL Server error log at C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG for the exact table, column, or batch ID referenced alongside Error 9833.
  • Run DBCC CHECKDB('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS; to rule out physical corruption on the affected pages.
  • If the error surfaced during an import, isolate the specific row/line in the source file using a hex editor to confirm invalid byte sequences (e.g., stray 0x81 or 0x8D bytes).

Step 2: Correct the Collation and Encoding Mismatch

  • Verify the column’s collation with:
SELECT name, collation_name FROM sys.columns WHERE object_id = OBJECT_ID('YourTable');
  • If the column uses a UTF-8 enabled collation (e.g., Latin1_General_100_CI_AS_SC_UTF8), ensure the source file or client application is actually encoding in UTF-8, not ANSI/UTF-16.
  • Re-save the source file using the correct encoding in a text editor (Notepad++ or VS Code: “Convert to UTF-8” without BOM if required).

Step 3: Reconfigure the Import Process

  • For BULK INSERT or BCP operations, explicitly declare the codepage and format file:
BULK INSERT YourTable
FROM 'C:\ImportData\source.csv'
WITH (CODEPAGE = '65001', FORMAT = 'CSV', FIRSTROW = 2);
  • If using SSIS or Azure Data Factory on Windows Server 2025, update the Flat File Connection Manager’s “Code Page” property to match the source file.
  • Restart the SQL Server service via services.msc or net stop MSSQLSERVER && net start MSSQLSERVER to clear any cached connection encoding settings.

Step 4: Patch and Update SQL Server

  • Confirm you are running the latest Cumulative Update for SQL Server 2025 via SELECT @@VERSION;, as early builds had known encoding validation bugs with extended Unicode characters.
  • Apply the latest CU from the Microsoft Update Catalog if your build number is outdated.

Alternative or Verification Steps

  • Re-run the original INSERT/BULK INSERT operation after the encoding fix; a clean execution with no Error 9833 confirms resolution.
  • As an alternative, if encoding cannot be changed at the source, create a staging table with VARBINARY(MAX) or a non-UTF-8 collation, import the raw data, then use CAST/CONVERT with explicit error handling to migrate it into the final UTF-8 table.

How to fix Error 9832 on Windows Server 2025 / Windows 11

Why This Error Happens

Error 9832 typically surfaces when SQL Server’s internal string-parsing routines—often triggered during SQLCLR assembly execution, metadata deserialization, or extended property parsing—receive a string parameter with an invalid offset or length value. This usually stems from corrupted system catalog metadata, a damaged SQLCLR assembly, or an incompatibility introduced by a recent Cumulative Update or collation change. Less commonly, it is caused by a third-party monitoring tool or linked server driver passing malformed Unicode strings into an internal substring operation.

Step-by-Step Resolution Guide

Step 1: Identify the Triggering Query or Process

  • Check the SQL Server Error Log (C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG) for the full stack trace accompanying Error 9832.
  • Run sp_readerrorlog 0, 1, 'Error: 9832' to isolate the exact session and command text.
  • Note whether the error correlates with a SQLCLR object (sys.assemblies), a linked server call, or a maintenance plan.

Step 2: Validate and Rebuild SQLCLR Assemblies

  • If the error points to a CLR-based function or stored procedure, run ALTER ASSEMBLY [AssemblyName] WITH PERMISSION_SET = SAFE to force a reload.
  • If the assembly is corrupted, drop and recreate it:
DROP ASSEMBLY [AssemblyName];
CREATE ASSEMBLY [AssemblyName] FROM 'C:\SQLAssemblies\AssemblyName.dll' WITH PERMISSION_SET = SAFE;
  • Confirm clr strict security is enabled and the assembly is properly signed, as unsigned/unsafe assemblies on SQL Server 2025 can throw malformed string exceptions.

Step 3: Check for Metadata Corruption

  • Run DBCC CHECKDB('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS to rule out catalog corruption.
  • If corruption is found in system tables, restore from the last known good backup rather than running repair with data loss.
  • Review sys.extended_properties for null-terminated or truncated string values that may be feeding the faulty parser.

Step 4: Apply the Latest Cumulative Update

  • Confirm your build number via SELECT @@VERSION;.
  • Download and apply the latest SQL Server 2025 Cumulative Update from the Microsoft Update Catalog, as this specific string-indexing bug is addressed in post-RTM patches for Windows Server 2025 compatibility.
  • Reboot the server after patching to ensure the sqlservr.exe binary and CLR host are fully refreshed.

Alternative or Verification Steps

  • After applying the fix, re-run the original query or job that triggered Error 9832 and confirm it completes without exception; monitor the Error Log for 24 hours to ensure the message does not recur.
  • If the issue persists, temporarily disable CLR integration (sp_configure 'clr enabled', 0; RECONFIGURE;) to confirm CLR is the root cause, then re-enable it only after assemblies are rebuilt.

How to fix Error 9831 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9831

Why This Error Happens

Error 9831 occurs when an internal SQL Server operation attempts to extract or manipulate a substring using a length parameter that exceeds the actual length of the source string. This is typically triggered by corrupted metadata, a damaged system catalog entry, or a malformed query plan cache artifact where internal string-handling routines receive inconsistent length values. In most cases, this points to either database corruption, a buggy third-party extended stored procedure, or an incompatibility introduced by a recent cumulative update or service pack on SQL Server 2025.

Step-by-Step Resolution Guide

Step 1: Identify the Triggering Query or Process

  • Check the SQL Server Error Log (C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Log\ERRORLOG) for the exact timestamp and statement context tied to Error 9831.
  • Use Extended Events (xEvents) to trace error_reported events filtered on error number 9831 to capture the exact query text and parameters.
  • Note whether the error correlates with a specific stored procedure, SSIS package, or linked server call.

Step 2: Run Database Consistency Checks

  • Open a new query window in SQL Server Management Studio (SSMS) connected to the affected instance.
  • Execute DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS; to rule out catalog or page-level corruption.
  • If corruption is found, review repair options (REPAIR_REBUILD first, avoiding REPAIR_ALLOW_DATA_LOSS unless necessary) and restore from a verified backup if repair fails.

Step 3: Clear and Rebuild the Procedure Cache

  • Run DBCC FREEPROCCACHE; to eliminate potentially corrupted cached execution plans causing the string-length mismatch.
  • If the error is isolated to a specific stored procedure, use sp_recompile 'SchemaName.ProcedureName'; to force plan regeneration.
  • Restart the SQL Server service via Services.msc or net stop MSSQLSERVER && net start MSSQLSERVER on Windows Server 2025 if the issue persists after cache clearing.

Step 4: Apply the Latest Cumulative Update

  • Verify your current build number with SELECT @@VERSION; and compare it against the latest Cumulative Update (CU) listed on the Microsoft SQL Server 2025 release notes page.
  • Download and install the latest CU from the official Microsoft Update Catalog, as this error has been linked to known string-parsing bugs patched in recent builds.
  • Reboot the Windows Server 2025 host after installation to ensure all binaries are correctly replaced.

Step 5: Audit Third-Party Extended Stored Procedures or CLR Assemblies

  • Disable any custom CLR integrations temporarily using sp_configure 'clr enabled', 0; RECONFIGURE; to test if the error originates outside native SQL Server code.
  • Review any xp_ prefixed extended stored procedures from third-party monitoring or backup tools for compatibility with SQL Server 2025.
  • Re-enable CLR only after confirming it is not the source (sp_configure 'clr enabled', 1; RECONFIGURE;).

Alternative or Verification Steps

  • Re-run the original failing query or job after each step to confirm Error 9831 no longer appears in the SQL Server Error Log or Windows Event Viewer (Event ID 9831 under Applications and Services Logs > MSSQLSERVER).
  • If the issue persists after all steps, restore the database to a point-in-time backup prior to the first occurrence of the error and reapply transaction logs to bypass the corrupted state entirely.

How to fix Error 9830 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9830

Why This Error Happens

Error 9830 occurs when SQL Server’s internal validation logic detects that a parameter passed to an internal function or extended stored procedure has received a negative value where only zero or positive integers are valid. This typically stems from corrupted configuration metadata, a malformed query parameter (such as an invalid offset or row count in pagination logic), or a damaged system catalog that is returning unexpected values to the SQL Server engine. In rarer cases, this can be triggered by third-party applications or ORM-generated queries passing improperly calculated values (e.g., negative OFFSET or FETCH values) to SQL Server 2025.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Query or Process

  • Check the SQL Server Error Log (Management > SQL Server Logs in SSMS) to capture the full error text, since %ls placeholders will be populated with the actual parameter name and procedure.
  • Run SELECT * FROM sys.dm_exec_requests WHERE session_id = <SPID> to identify the session and query that triggered the error.
  • Cross-reference the timestamp with Windows Event Viewer under Applications and Services Logs > MSSQLSERVER to confirm Event ID 9830.

Step 2: Validate Query Parameters and Application Code

  • Inspect any OFFSET/FETCH NEXT clauses in T-SQL queries for negative values, especially in pagination logic generated by application code (e.g., OFFSET -1 ROWS).
  • Check stored procedures or ORM-generated queries (Entity Framework, Hibernate, etc.) for parameters like @PageSize or @RowCount that may compute to a negative number due to faulty application logic.
  • Correct the application logic to enforce a minimum value of zero using validation (e.g., GREATEST(0, @value) or equivalent application-side checks).

Step 3: Run Database Consistency Checks

  • Execute DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS; to rule out catalog or page-level corruption feeding bad metadata into internal functions.
  • Repair using DBCC CHECKDB ('YourDatabaseName', REPAIR_REBUILD) if corruption is found in non-clustered indexes or system tables.
  • Restart the SQL Server service via services.msc or Restart-Service MSSQLSERVER in PowerShell after repairs to clear any cached execution plans referencing corrupted objects.

Step 4: Update SQL Server 2025 and Verify Compatibility

  • Confirm the current Cumulative Update (CU) level using SELECT @@VERSION; and compare against the latest CU listed on the Microsoft Update Catalog.
  • Apply the latest CU via Windows Update or manually download from https://www.microsoft.com/download if the build is outdated, as this error has known fixes in early 2025 CU releases for extended stored procedure validation bugs.
  • Reboot the Windows Server 2025 / Windows 11 host after installation to ensure all SQL Server services reinitialize cleanly.

Alternative or Verification Steps

  • Re-run the original query or application transaction that triggered Error 9830 and confirm no exception is raised in SSMS or the application logs.
  • If the error persists after patching and code review, enable SQL Server Extended Events (CREATE EVENT SESSION with the error_reported event) to capture the exact call stack and parameter values in real time for escalation to Microsoft Support.

How to fix Error 9829 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9829 (STRING_AGG Result Exceeds 8000 Bytes)

Why This Error Happens

This error occurs because the STRING_AGG function’s default return type is an nvarchar or varchar with a maximum size of 8000 bytes, which is insufficient when aggregating large datasets or long strings. SQL Server 2025 enforces this limit strictly to prevent silent data truncation, throwing Error 9829 instead of cutting off the result. The root cause is almost always an implicit data type casting issue where the query optimizer cannot infer that a Large Object (LOB) type is needed for the output.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Query

  • Locate the exact STRING_AGG statement referenced in the error log or SSMS output.
  • Check the source column data types being aggregated (e.g., VARCHAR(100) vs VARCHAR(MAX)).
  • Run the query in isolation using SQL Server Management Studio (SSMS) 21 to confirm the byte overflow.

Step 2: Explicitly Cast Input Arguments to LOB Types

  • Modify the T-SQL query to wrap the aggregated column in a CAST or CONVERT function.
  • Use the following syntax to force the engine to use Large Object storage:
  SELECT STRING_AGG(CAST(ColumnName AS NVARCHAR(MAX)), ', ') 
  FROM YourTable;
  • Ensure the separator argument (the second parameter) does not inadvertently force a smaller data type context if using complex concatenation.

Step 3: Update Database Compatibility Level

  • Open SSMS and right-click the specific Database in Object Explorer.
  • Navigate to Properties > Options and verify the Compatibility Level is set to SQL Server 2025 (170) or higher.
  • Execute the following command to verify via T-SQL if GUI access is restricted:
  SELECT compatibility_level FROM sys.databases WHERE name = 'YourDatabaseName';

Step 4: Adjust Server Memory Configuration for LOB Processing

  • Navigate to Control Panel > System > Advanced System Settings on the Windows Server 2025 host to ensure virtual memory paging is sufficient for large object buffering.
  • In SSMS, right-click the Server instance, select Properties > Memory, and ensure the “Maximum server memory” is not restricting the buffer pool needed for LOB page allocations.
  • Restart the SQL Server (MSSQLSERVER) service via the Services app (services.msc) to apply configuration changes.

Alternative or Verification Steps

  • Verification: Re-run the original query with the CAST(... AS NVARCHAR(MAX)) modification and confirm the result set returns without triggering Error 9829, checking that the data length exceeds the previous 8000-byte boundary in the results grid.
  • Alternative: If modifying the application source code is not immediately feasible, use STRING_AGG within a Common Table Expression (CTE) that explicitly defines the output schema as VARCHAR(MAX) before the final SELECT statement is processed by the client application.

How to fix Error 9828 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9828 – TRANSLATE Function Argument Mismatch

Why This Error Happens

This error occurs because the TRANSLATE function in SQL Server 2025 strictly requires the second argument (characters to replace) and the third argument (replacement characters) to have the exact same length. SQL Server validates this character count at parse time, and if the two strings are mismatched—even by a single character, including trailing or leading whitespace—the query will fail to compile. This is often caused by hardcoded strings being edited inconsistently or dynamic variable concatenation that accidentally truncates one of the character sets.

Step-by-Step Resolution Guide

Step 1: Locate the Offending Query

  • Identify the specific stored procedure, view, or ad-hoc query triggering Error 9828 by checking the SQL Server Error Log or Activity Monitor on your Windows Server 2025 instance.
  • Use SELECT * FROM sys.dm_exec_requests to find the active session ID if the error is intermittent and tied to a specific application connection.

Step 2: Audit the Argument Character Counts

  • Manually count the characters in the second and third arguments of the TRANSLATE() call.
  • Example of a broken query: SELECT TRANSLATE('Data123', '123', '!@') (This fails because ‘123’ has 3 characters, but ‘!@’ only has 2).
  • Check for invisible Unicode characters or extra spaces using SELECT LEN('your_string') to verify the exact length SQL Server is reading.

Step 3: Correct the String Length Mismatch

  • Update the query to ensure a 1-to-1 mapping between the strings.
  • Corrected example: SELECT TRANSLATE('Data123', '123', '!@#') (Now both strings have 3 characters).
  • If the strings are generated dynamically via variables, add a validation check using IF LEN(@FindChars) <> LEN(@ReplaceChars) RAISERROR('Mismatched Length', 16, 1) before executing the TRANSLATE logic.

Step 4: Test in a Non-Production Environment

  • Isolate the corrected query and run it in SQL Server Management Studio (SSMS) connected to a development instance.
  • Ensure the query executes without throwing Error 9828 before pushing the update to the production environment on Windows Server 2025.

Alternative or Verification Steps

  • Verification: Re-run the original failing stored procedure or application call; if the output returns the expected translated string without an error dialog, the fix is confirmed.
  • Alternative: If character counts are difficult to match due to variable data, consider using nested REPLACE() functions instead, as REPLACE does not require equal-length arguments for find-and-replace operations.

How to fix Error 9827 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9827 – “Not Enough Memory for DECOMPRESS Builtin to Execute”

Why This Error Happens

Error 9827 occurs when SQL Server’s memory broker cannot allocate sufficient workspace memory to the DECOMPRESS function at query execution time. This typically happens because the SQL Server instance is under memory pressure from other concurrent queries, the “Max Server Memory” setting is configured too restrictively, or the data being decompressed exceeds the available memory grant. Large COMPRESS/DECOMPRESS operations on varbinary columns are particularly memory-intensive since SQL Server must allocate contiguous memory for both the compressed and decompressed payloads simultaneously.

Step-by-Step Resolution Guide

Step 1: Check and Adjust SQL Server Max Memory Configuration

  • Open SQL Server Management Studio (SSMS) and connect to the instance.
  • Run EXEC sp_configure 'show advanced options', 1; RECONFIGURE; followed by EXEC sp_configure 'max server memory'; to view current limits.
  • If the value is too low relative to physical RAM, increase it using EXEC sp_configure 'max server memory (MB)', <new_value>; RECONFIGURE;.
  • Ensure at least 20-25% of physical RAM is reserved for the OS and other processes on Windows Server 2025/Windows 11.

Step 2: Identify and Resolve Memory Pressure from Other Processes

  • Open Task Manager or Performance Monitor (perfmon.exe) and check the SQLServer:Memory Manager counters, specifically Memory Grants Pending and Total Server Memory.
  • Look for other high-memory-consuming queries or sessions using:
  SELECT * FROM sys.dm_exec_query_memory_grants;
  • Kill or optimize any runaway queries holding large memory grants using KILL <session_id>.
  • Restart the SQL Server service via services.msc if memory remains fragmented and unreleased.

Step 3: Optimize the Query Using DECOMPRESS

  • Avoid decompressing extremely large BLOBs in a single batch; break the operation into smaller row-based batches using a cursor or WHILE loop with TOP (N).
  • Rewrite the query to filter rows before applying DECOMPRESS, reducing the dataset size:
  SELECT DECOMPRESS(CompressedColumn) 
  FROM YourTable 
  WHERE RowID BETWEEN 1 AND 1000;
  • Avoid using DECOMPRESS inside correlated subqueries or JOIN conditions, as this multiplies memory grant requirements.

Step 4: Verify Database Compatibility Level and Patch Status

  • Confirm the database compatibility level is set correctly for SQL Server 2025 using:
  SELECT name, compatibility_level FROM sys.databases WHERE name = 'YourDB';
  • Ensure the latest Cumulative Update (CU) for SQL Server 2025 is installed, as early builds may contain memory grant estimation bugs related to compression functions.
  • Apply the update via SQL Server Setup or Microsoft Update Catalog, then restart the instance.

Alternative or Verification Steps

  • After applying the fix, re-run the original query that triggered Error 9827 and monitor the Errors and Warnings extended event session to confirm Error 9827 no longer fires.
  • As an alternative, if memory constraints persist on the host, consider migrating the DECOMPRESS workload to a batch job during off-peak hours or offloading it to a read-replica with higher allocated memory.

How to fix Error 9826 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9826 – DECOMPRESS Function Failure in SQL Server 2025

Why This Error Happens

Error 9826 occurs when the DECOMPRESS built-in function receives a varbinary input that was never compressed using the standard GZIP algorithm expected by SQL Server, or when the compressed data has been truncated or altered during storage or transit. This commonly happens when data compressed by a third-party tool (using a different compression standard) is fed into DECOMPRESS, or when a COMPRESS-generated blob is accidentally modified by an ETL process, string conversion, or encoding change (e.g., converting binary data to a non-binary collation). Additionally, physical corruption of the underlying page due to disk I/O errors can trigger this error even on data that was originally compressed correctly.

Step-by-Step Resolution Guide

Step 1: Verify the Data Source and Compression Method

  • Confirm that the binary data being passed to DECOMPRESS was actually generated using the native COMPRESS() function in T-SQL.
  • Run a quick check on the source column: SELECT TOP 10 YourColumn, DATALENGTH(YourColumn) FROM YourTable WHERE YourColumn IS NOT NULL;
  • If the data originates from an external application (e.g., a .NET service using System.IO.Compression), ensure it uses the GZipStream class specifically, as SQL Server’s COMPRESS function relies on the GZIP standard.

Step 2: Check for Data Truncation or Collation Conflicts

  • Inspect the target column’s data type; it must be VARBINARY(MAX). Using a fixed-length VARBINARY(n) can silently truncate the compressed stream, leading to corruption.
  • Review any ETL pipelines (SSIS packages or Azure Data Factory flows) to ensure the binary stream is not being cast to VARCHAR or NVARCHAR at any point, as this will corrupt the byte-order and binary integrity of the GZIP header.
  • Validate the connection string drivers (ODBC/JDBC) are configured to handle binary large objects (BLOBs) without character encoding conversion.

Step 3: Run DBCC CHECKDB to Rule Out Physical Corruption

  • If the data was previously verified as valid but is now throwing Error 9826, check for underlying disk or page corruption.
  • Execute the following in SQL Server Management Studio (SSMS):
    DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
  • If corruption is found in the specific pages holding the compressed blob, you may need to restore the table from the last known good backup rather than attempting a repair, as REPAIR_ALLOW_DATA_LOSS may not recover compressed binary integrity.

Step 4: Implement Error Handling for Legacy Data

  • If migrating from an older system where mixed compressed/uncompressed data exists in the same column, implement a TRY_CAST or TRY-CATCH block to handle decompression gracefully rather than failing the entire batch.
  • Update your query logic to the following pattern to bypass invalid rows:
  BEGIN TRY
      SELECT DECOMPRESS(YourColumn) FROM YourTable;
  END TRY
  BEGIN CATCH
      PRINT 'Invalid compression data found in row ID: ' + CAST(id AS VARCHAR);
  END CATCH

Alternative or Verification Steps

  • Verification: After applying the fix, re-run the SELECT DECOMPRESS(YourColumn) query on the specific row IDs that previously failed. If the output returns readable text/binary data instead of a NULL or error, the fix was successful.
  • Alternative: If the data must remain compatible with external non-SQL systems, consider switching from the native COMPRESS/DECOMPRESS functions to a CLR Stored Procedure that explicitly defines the compression algorithm (e.g., Deflate vs. GZip) to ensure byte-for-byte compatibility across platforms.

How to fix Error 9825 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9825 – DECOMPRESS Builtin Failed

Why This Error Happens

Error 9825 occurs when SQL Server’s DECOMPRESS function encounters data that is not in a valid compressed format, often because the data was corrupted during storage or transmission, or because it was never actually compressed using the corresponding COMPRESS function. This can also happen if the binary/varbinary column was altered, truncated, or manipulated by an external process outside of SQL Server’s compression algorithm (GZIP). Additionally, on Windows Server 2025 and Windows 11 environments, this can surface due to mismatched collation settings or data corruption introduced during cross-platform migrations.

Step-by-Step Resolution Guide

Step 1: Verify the Source Data Format

  • Check that the data being passed to DECOMPRESS was originally compressed using the native COMPRESS() function in SQL Server 2025.
  • Run a validation query to inspect the binary header: SELECT TOP 10 ColumnName, DATALENGTH(ColumnName) FROM YourTable WHERE ColumnName IS NOT NULL;
  • Confirm the data wasn’t manually edited or exported/imported via a tool that could alter byte-order or strip GZIP headers.

Step 2: Check for Data Corruption or Truncation

  • Run DBCC CHECKDB('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS; to rule out page-level corruption.
  • Inspect the column definition to ensure it is VARBINARY(MAX) and not truncated by a smaller data type (e.g., VARBINARY(8000) or IMAGE).
  • If using Always Encrypted or TDE, verify the encryption/decryption keys are correctly mapped, as key mismatches can corrupt binary payloads.

Step 3: Isolate the Query and Test DECOMPRESS Manually

  • Isolate the exact row causing the failure using a binary search approach (e.g., WHERE ID BETWEEN X AND Y).
  • Test the function manually: SELECT DECOMPRESS(ColumnName) FROM YourTable WHERE ID = [ProblemID];
  • If the error persists only on specific rows, flag those rows as corrupted and restore them from a known good backup.

Step 4: Update SQL Server 2025 Cumulative Updates

  • Navigate to the SQL Server Configuration Manager and verify the current build version via SELECT @@VERSION;.
  • Download and install the latest Cumulative Update (CU) from the Microsoft Update Catalog, as early 2025 builds had a documented bug with GZIP stream handling on Windows Server 2025.
  • Restart the SQL Server service via services.msc or net stop MSSQLSERVER && net start MSSQLSERVER.

Alternative or Verification Steps

  • Verification: After applying the fix, re-run the original failing query. If successful, execute SELECT DATALENGTH(DECOMPRESS(ColumnName)) to confirm the output length matches the expected uncompressed size.
  • Alternative: If the data is confirmed corrupted and no backup exists, restore the specific table or row from the most recent .bak file using RESTORE DATABASE... WITH PARTIAL to recover only the necessary table schema and data.

How to fix Error 9824 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9824 – Not Enough Memory for COMPRESS Builtin

Why This Error Happens

Error 9824 occurs when SQL Server’s memory grant manager cannot allocate sufficient workspace memory for the COMPRESS() function to perform its compression operation, typically during large batch operations or when processing oversized VARBINARY/VARCHAR data. This is commonly triggered by an undersized max server memory configuration relative to workload demands, excessive memory pressure from concurrent queries, or insufficient available system RAM on the host. In some cases, this is exacerbated by memory fragmentation within the SQL Server buffer pool when handling very large objects (LOBs) during compression.

Step-by-Step Resolution Guide

Step 1: Check Current SQL Server Memory Configuration

  • Open SQL Server Management Studio (SSMS) and connect to the instance.
  • Run the following query to check current memory settings:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'max server memory';
  • Verify this value isn’t set too restrictively compared to total physical RAM on the Windows Server 2025 / Windows 11 host.

Step 2: Increase Max Server Memory Allocation

  • Navigate to SSMS > Server Properties > Memory.
  • Increase the “Maximum server memory (MB)” value, leaving at least 4–6 GB free for the OS.
  • Alternatively, run:
EXEC sp_configure 'max server memory', 16384; -- adjust value in MB
RECONFIGURE;
  • Restart the SQL Server service via Services.msc or net stop MSSQLSERVER && net start MSSQLSERVER.

Step 3: Reduce Batch Size for COMPRESS Operations

  • If the query processes large datasets in a single batch, break the operation into smaller chunks using a loop with TOP (n) and WHILE constructs.
  • Avoid compressing extremely large BLOB/VARBINARY(MAX) columns in a single transaction; process rows incrementally instead.

Step 4: Check for Memory Pressure from the OS Level

  • Open Task Manager or Performance Monitor (PerfMon) on Windows Server 2025 / Windows 11.
  • Monitor the counters: Memory\Available MBytes and SQLServer:Memory Manager\Total Server Memory (KB).
  • Close unnecessary background services or applications consuming excess RAM, or consider adding physical memory to the host if consistently near capacity.

Step 5: Update SQL Server 2025 to Latest Cumulative Update

  • Check installed build version:
SELECT @@VERSION;
  • Download and apply the latest Cumulative Update (CU) from the Microsoft Update Catalog, as memory grant handling for COMPRESS has known optimizations in recent patches.

Alternative or Verification Steps

  • After applying changes, re-run the failing query and monitor the SQL Server Error Log (Management > SQL Server Logs in SSMS) to confirm Error 9824 no longer appears.
  • As an alternative, if memory cannot be increased, rewrite the query to use OPTION (MAXDOP 1) to reduce parallel memory grant requests, which can alleviate pressure during compression operations.

How to fix Error 9823 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9823 – COMPRESS Builtin Failed

Why This Error Happens

Error 9823 occurs when the COMPRESS function fails to execute the GZIP compression algorithm on the input data, typically due to insufficient memory in the workspace memory grant allocated to the query. This can also be triggered by corrupted SQLOS thread resources or when the input expression exceeds internal buffer limits during the compression attempt. In some cases, a damaged sqllang.dll or incomplete Cumulative Update installation on SQL Server 2025 can leave the COMPRESS/DECOMPRESS native implementation in an inconsistent state.

Step-by-Step Resolution Guide

Step 1: Verify Input Data and Memory Grants

  • Check the source column or variable being passed into COMPRESS() for NULL corruption or unsupported data types (it must be VARBINARY, VARCHAR, NVARCHAR, or CHAR compatible).
  • Run DBCC MEMORYSTATUS to inspect current memory pressure on the instance.
  • Confirm “max server memory” in sp_configure is not set too restrictively for Windows Server 2025 workloads.

Step 2: Rebuild the Query Execution Plan

  • Clear the potentially corrupted cached execution plan using:
DBCC FREEPROCCACHE;
  • Re-run the failing query in isolation inside SQL Server Management Studio (SSMS) to confirm if the error persists outside of a stored procedure.
  • If using a linked server or CLR integration, temporarily disable CLR via sp_configure 'clr enabled', 0; to rule out conflicts.

Step 3: Repair SQL Server Binaries

  • Open Control Panel on Windows Server 2025/Windows 11 and navigate to “Programs and Features.”
  • Select Microsoft SQL Server 2025, click “Uninstall/Change,” and choose the Repair option for the Database Engine instance.
  • Alternatively, run the setup executable directly from the installation media:
setup.exe /ACTION=REPAIR /INSTANCENAME=MSSQLSERVER
  • Restart the SQL Server service via services.msc once the repair completes.

Step 4: Increase TempDB Capacity

  • Since COMPRESS uses TempDB for intermediate buffer storage, navigate to SSMS > Databases > tempdb > Properties.
  • Increase the initial file size (e.g., to 2048MB) and set autogrowth to a fixed increment (e.g., 512MB) to prevent allocation failures during heavy compression tasks.

Alternative or Verification Steps

  • To verify the fix, execute a test query such as SELECT COMPRESS('Verification_String_Test'); and confirm it returns a VARBINARY hash without throwing Error 9823.
  • If the error persists after a repair, check the Windows Event Viewer (Application Log) for underlying .NET Runtime or Side-by-Side (SxS) errors, as these often block the native compression libraries required by SQL Server 2025.

How to fix Error 9822 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9822 – Internal Error During Time Zone Data Access

Why This Error Happens

Error 9822 occurs when SQL Server 2025 fails to read or parse the internal time zone data it relies on for functions like AT TIME ZONE and sys.time_zone_info. This is typically caused by a corrupted or outdated Windows time zone database (tzres.dll / ICU time zone data), missing registry entries under the Windows time zone key, or insufficient permissions for the SQL Server service account to access system time zone resources. In some cases, a recent Windows Update or ICU library mismatch between the OS and SQL Server 2025’s internationalization components can also trigger this internal inconsistency.

Step-by-Step Resolution Guide

Step 1: Verify Windows Time Zone Data Integrity

  • Open Command Prompt as Administrator and run w32tm /resync to confirm the Windows Time service is functioning correctly.
  • Check HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones in the Registry Editor to ensure all time zone keys are present and not corrupted.
  • Run sfc /scannow to repair any corrupted system files, including time zone resource DLLs.

Step 2: Update SQL Server 2025 and ICU Components

  • Confirm you are running the latest Cumulative Update (CU) for SQL Server 2025 via SELECT @@VERSION; in a query window.
  • Download and apply the latest CU from the Microsoft Update Catalog if the build number is outdated.
  • Restart the SQL Server service after installation: net stop MSSQLSERVER && net start MSSQLSERVER.

Step 3: Validate SQL Server Service Account Permissions

  • Open Services.msc, locate SQL Server (MSSQLSERVER), and confirm the “Log On As” account has read access to C:\Windows\System32\tzres.dll.
  • Grant explicit Read & Execute permissions to the service account on C:\Windows\Globalization\ICU if using a custom or domain service account.
  • Restart the SQL Server service to apply permission changes.

Step 4: Rebuild the Time Zone Cache in SQL Server

  • Execute DBCC FREESYSTEMCACHE('ALL'); in SSMS to clear cached metadata, including stale time zone information.
  • Run a test query: SELECT SYSDATETIMEOFFSET() AT TIME ZONE 'Pacific Standard Time'; to confirm the engine can access time zone data without throwing Error 9822.

Alternative or Verification Steps

  • Query SELECT * FROM sys.time_zone_info; — if this returns a full, populated list without error, the fix was successful.
  • If the error persists, uninstall and reinstall the Windows Language and Regional Settings feature pack via Settings > Time & Language > Language & Region, then reboot before restarting SQL Server.

How to fix Error 9821 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9821 – Internal Error During Time Zone Conversion in SQL Server 2025

Why This Error Happens

Error 9821 typically occurs when SQL Server’s internal time zone database (ICU-based tz data embedded in the engine) is out of sync with the Windows OS time zone registry entries, causing a mismatch during AT TIME ZONE or datetimeoffset conversions. This can also be triggered by a corrupted or outdated Windows ICU/tzdata package, incomplete Windows Updates, or custom/legacy time zone registrations (via tzutil or manual registry edits) that SQL Server’s conversion engine cannot resolve. In some cases, it stems from SQL Server service account permission issues preventing read access to HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones.

Step-by-Step Resolution Guide

Step 1: Verify and Update Windows Time Zone Data

  • Open PowerShell as Administrator and run Get-TimeZone -ListAvailable to confirm the time zone database isn’t corrupted.
  • Ensure Windows Server 2025 / Windows 11 has the latest cumulative update installed via Settings > Windows Update, since these updates often include ICU tzdata patches.
  • Run tzutil /g to confirm the current system time zone is valid and not a custom/unsupported entry.

Step 2: Check SQL Server Service Account Permissions

  • Open regedit and navigate to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones.
  • Right-click the key, select Permissions, and confirm the SQL Server service account (e.g., NT Service\MSSQLSERVER) has at least Read access.
  • Restart the SQL Server service after applying permission changes using services.msc or net stop MSSQLSERVER && net start MSSQLSERVER.

Step 3: Rebuild or Refresh SQL Server’s Internal ICU Cache

  • Stop the SQL Server instance completely.
  • Clear any cached ICU data by running DBCC FREESYSTEMCACHE('ALL') before shutdown (if the instance is still responsive).
  • Reinstall the latest SQL Server 2025 Cumulative Update (CU) from the Microsoft Download Center, as CUs frequently refresh bundled ICU time zone libraries.
  • Restart the instance and re-run the failing query that referenced AT TIME ZONE or SWITCHOFFSET.

Step 4: Validate Time Zone Conversion Query Syntax

  • Re-check the T-SQL query causing the error for unsupported or deprecated time zone names (e.g., using "Pacific Standard Time" instead of IANA-style names not yet supported).
  • Replace ambiguous or custom time zone strings with standard Windows time zone names found in sys.time_zone_info.

Alternative or Verification Steps

  • Run SELECT * FROM sys.time_zone_info WHERE name = 'Your Time Zone Name'; to confirm SQL Server recognizes the zone correctly post-fix.
  • If the error persists, use sp_configure to check for any legacy compatibility level settings forcing outdated time zone handling, and consider running the query against a test database with the latest compatibility level (160+) to isolate whether it’s a database-specific or server-wide issue.

How to fix Error 9820 on Windows Server 2025 / Windows 11

Troubleshooting Guide: Error 9820 – Invalid Time Zone Parameter in AT TIME ZONE Clause

Why This Error Happens

This error occurs when the time zone string passed to the AT TIME ZONE clause does not match any entry recognized by SQL Server’s internal time zone table, which is sourced from the Windows registry. It is commonly caused by typos, incorrect casing combined with deprecated naming conventions, or a mismatch between the time zone names available on Windows Server 2025/Windows 11 and the names expected by the SQL Server 2025 engine. Additionally, this can surface after a Windows Update changes or renames IANA/Windows time zone mappings, leaving SQL Server with stale or unrecognized identifiers in sys.time_zone_info.

Step-by-Step Resolution Guide

Step 1: Verify the Exact Time Zone Name Against SQL Server’s Internal List

  • Run the following query to pull the exact, case-sensitive list of supported time zones directly from the engine:
  SELECT name, current_utc_offset, is_currently_dst 
  FROM sys.time_zone_info;
  • Compare the string you used in your AT TIME ZONE 'YourZoneName' clause character-by-character against the name column output.
  • Pay close attention to common errors, such as using “Eastern Standard Time” vs. an incorrect variant like “Eastern Time” or “EST.”

Step 2: Cross-Check Windows Registry Time Zone Keys

  • Since SQL Server pulls this data from the OS, open the Windows Registry Editor (regedit.exe) on the Windows Server 2025 host.
  • Navigate to the following path to inspect the raw naming conventions:
  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
  • Ensure the specific key folder name (e.g., “Pacific Standard Time”) exists exactly as you are trying to use it in your T-SQL query.
  • If the zone is missing entirely, verify that recent Windows Updates haven’t deprecated that specific identifier in favor of a new IANA-standard name.

Step 3: Update SQL Server Cumulative Updates (CU)

  • Confirm that SQL Server 2025 is patched to the latest Cumulative Update (CU), as early builds of major releases sometimes ship with outdated time zone mapping tables that haven’t synced with the newest Windows 11/Server 2025 OS definitions.
  • Download the latest CU from the Microsoft Update Catalog and apply it during a scheduled maintenance window.
  • Restart the MSSQLSERVER service after the patch installation to force a refresh of the internal time zone cache.

Step 4: Hardcode the Validated String in T-SQL

  • Once the correct name is identified via Step 1, update your query to use the exact validated name:
  SELECT SYSDATETIMEOFFSET() AT TIME ZONE 'Pacific Standard Time';
  • Avoid using dynamic variables for the time zone name without first validating them against the sys.time_zone_info table in your application logic to prevent future user-input errors.

Alternative or Verification Steps

  • Verification: Execute SELECT CURRENT_TIMEZONE(); to see the default time zone currently assigned to the SQL Server instance, which helps confirm the server’s baseline configuration is being read correctly.
  • Alternative: If a specific legacy time zone name has been permanently deprecated by a Windows Update, use the AT TIME ZONE clause with the newer IANA-standard equivalent name (e.g., “America/Los_Angeles”) if your specific CU build supports the newer IANA mapping standard alongside the legacy Windows names.

How to fix Error 9819 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9819

Why This Error Happens

This error occurs when SQL Server attempts to implicitly or explicitly convert a string value into a target data type (such as int, decimal, date, or money) but the string format does not match the expected format for the specified culture. This is frequently caused by locale mismatches—for example, a string formatted for en-US (using a period as a decimal separator) being parsed under a culture like de-DE (which expects a comma). Corrupted application input, incorrect COLLATE settings, or improperly configured regional settings on Windows Server 2025 can also trigger this conversion failure.

Step-by-Step Resolution Guide

Step 1: Identify the Offending Query and Data

  • Capture the exact query using SQL Server Profiler or Extended Events, filtering on Error Number 9819.
  • Check the application code or ETL job (SSIS, Azure Data Factory, etc.) for CAST, CONVERT, or TRY_CONVERT statements using a CULTURE argument.
  • Example of a problematic statement: SELECT CONVERT(decimal(10,2), '1,234.56', 'en-GB').

Step 2: Verify Server and Database Culture Settings

  • Open SQL Server Management Studio (SSMS) and run SELECT SERVERPROPERTY('Collation'); to check the default server collation.
  • Compare this against the OS regional settings found in Control Panel > Region > Administrative > Language for non-Unicode programs on Windows Server 2025.
  • Ensure the CULTURE parameter passed in your T-SQL CONVERT function matches the format of the incoming string data (e.g., use 'en-US' for comma-thousands/period-decimal formats).

Step 3: Sanitize and Standardize Input Data

  • Modify the application or stored procedure to strip formatting characters (like thousands separators) before conversion using REPLACE(string_value, ',', '').
  • Utilize TRY_CONVERT instead of CONVERT to handle malformed data gracefully without crashing the transaction: SELECT TRY_CONVERT(decimal(10,2), @string_value, 107);.
  • Validate the string length and format using ISNUMERIC() or regex-based checks (via CLR functions) prior to the conversion attempt.

Step 4: Update Statistics and Drivers

  • Ensure the SQL Server 2025 instance is updated to the latest Cumulative Update (CU) via the Microsoft Update Catalog, as this specific error message format (%.*ls) may relate to a known client-driver bug.
  • Verify the ODBC or OLE DB driver version on the client machine is compatible with Windows 11/Server 2025 if the error originates from a connected application rather than native T-SQL.

Alternative or Verification Steps

  • Verification: Re-run the specific query or ETL job using SET LANGUAGE us_english; at the start of the session to force a standard parsing culture, then confirm the data loads without throwing Error 9819.
  • Alternative: If the issue persists in a linked server scenario, bypass the conversion by importing the data as NVARCHAR into a staging table first, then perform the type conversion using explicit style codes (e.g., style 101 for US date format) within a separate, controlled batch.

How to fix Error 9818 on Windows Server 2025 / Windows 11

Troubleshooting Guide: SQL Server Error 9818 — Unsupported Culture Parameter

Why This Error Happens

Error 9818 occurs when a T-SQL function (such as FORMAT, PARSE, TRY_PARSE, or AT TIME ZONE-related culture operations) receives a culture argument that is not registered in the .NET Globalization tables used by SQL Server 2025’s CLR runtime. This commonly happens due to a typo in the locale name (e.g., 'en-USA' instead of 'en-US'), an outdated or missing ICU/NLS globalization data package on Windows Server 2025, or a mismatch between the SQL Server collation/language settings and the invariant culture mode now enforced by the hosting .NET runtime. It can also surface after an in-place upgrade where the underlying CLR host was reconfigured to run in a reduced globalization footprint.

Step-by-Step Resolution Guide

Step 1: Validate the Culture String Syntax

  • Open the query that throws Error 9818 and locate the exact culture string passed into the function (e.g., FORMAT(GetDate(), 'd', 'en-US')).
  • Cross-check the string against the official BCP-47 culture name list (e.g., en-US, fr-FR, de-DE) — SQL Server is case-sensitive to malformed separators like underscores (en_US is invalid; use en-US).
  • Run SELECT * FROM sys.fn_helpcollations(); to confirm the server recognizes related collation/locale naming conventions.

Step 2: Confirm .NET Globalization Invariant Mode Is Disabled

  • SQL Server 2025 relies on the .NET globalization-invariant runtime setting being OFF for full culture support.
  • Navigate to the SQL Server installation folder, typically C:\Program Files\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQL\Binn\.
  • Open sqlservr.exe.config (or the relevant runtime config file) and verify the entry: <configuration><runtime><AppContextSwitchOverrides value="System.Globalization.Invariant=false" /></runtime></configuration>.
  • Save the file and restart the SQL Server service via services.msc or net stop MSSQLSERVER && net start MSSQLSERVER.

Step 3: Install or Repair Windows Globalization Data

  • On Windows Server 2025 / Windows 11, open PowerShell as Administrator and run Get-WindowsCapability -Online | Where-Object {$_.Name -like "*Language*"} to check installed language packs.
  • If the required culture pack is missing, install it with Add-WindowsCapability -Online -Name "Language.Basic~~~en-US~0.0.1.0" (replace with the relevant culture code).
  • Alternatively, run DISM /Online /Cleanup-Image /RestoreHealth followed by sfc /scannow to repair corrupted system globalization files (ICU data).

Step 4: Apply the Latest SQL Server 2025 Cumulative Update

  • Microsoft periodically patches ICU culture mapping tables bundled with SQL Server.
  • Download and apply the latest Cumulative Update (CU) from the Microsoft Update Catalog matching your SQL Server 2025 build.
  • After patching, re-run SELECT @@VERSION; to confirm the build number has incremented, then retest the failing query.

Alternative or Verification Steps

  • Verify the fix by re-executing the original failing statement (e.g., SELECT FORMAT(SYSDATETIME(), 'D', 'en-US');) and confirming it returns formatted output instead of Error 9818.
  • As a quick workaround while patching is pending, replace the custom culture parameter with the invariant culture (empty string '') or a known-safe culture like 'en-US' to unblock the application temporarily.