Fix RPC_X_SS_CHAR_TRANS_SHORT_FILE 0X000006EE
This error means a character translation table file is too short. The quick fix is to recreate the file with proper content.
You're trying to connect to a remote SQL Server or use a named pipe, and you get this stupid 0X000006EE error. It's not a network problem, it's not a permission problem — it's a file problem. The file that maps Unicode characters to OEM characters is broken or truncated. Here's the fix.
The real fix: replace the broken .nls file
What's actually happening here is the character translation table used by RPC (Remote Procedure Call) when converting strings between Unicode and the local code page is corrupt. Each code page has a file like c_1252.nls (for Windows Western European) or c_437.nls (for OEM US). These files must be exactly 512 bytes or more. If they're smaller, RPC throws this error.
The quick fix is to copy a good copy from another machine or from the Windows installation media. Here's the step-by-step:
- Check which code page you're using. Run this in Command Prompt (admin):
chcp
You'll see something like Active code page: 437 or 1252. - Go to
C:\Windows\System32and find the matching file. For code page 437, it'sc_437.nls. For 1252, it'sc_1252.nls. - Right-click the file, select Properties, and check the Size. If it's less than 512 bytes (like 0 KB or 1 KB), that's your problem.
- Get a replacement from a working machine. Copy the same file from another Windows PC or server with the same version (Windows 10, Server 2019, etc.). You can also extract it from the Windows installation
install.wimorinstall.esdusing DISM. - Replace the corrupt file. You might need to take ownership first:
takeown /f C:\Windows\System32\c_437.nls icacls C:\Windows\System32\c_437.nls /grant administrators:F - Reboot the machine. The error should be gone.
If you can't get a replacement file, you can also try the System File Checker:
sfc /scannow
This will restore missing or corrupt system files, including .nls files. But it only works if the file isn't completely missing or if the system has a backup. In my experience, sfc often says it fixed something but still leaves the file at 0 bytes. The manual copy is more reliable.
Why this error shows up
The RPC_X_SS_CHAR_TRANS_SHORT_FILE error (code 0x000006EE) comes from the RPC runtime when it tries to load a character translation table and the file is too small. The specification says the file must have at least 512 bytes. If it's smaller, RPC can't read the table, and it fails the call.
This usually happens after a failed Windows update, a disk corruption, or a botched system restore. I've also seen it after a virus cleaner deleted the file thinking it was malware. The file is small and looks weird, so some scanners flag it.
The scenario: You're trying to run sqlcmd against a remote SQL Server using named pipes, or you're using a .NET app that calls RPC, and you get this error. It's not a SQL Server issue — it's a Windows RPC issue.
Less common variations
Sometimes the problem isn't the file itself but the registry. RPC reads the code page from this key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
Check the ACP (ANSI code page) and OEMCP (OEM code page) values. If they point to a file that doesn't exist, you get the same error. Fix: set them to a valid code page like 437 or 1252.
Another variation: the file exists and is 512 bytes, but the checksum is wrong. That's rare on Windows NT-based systems. You can verify integrity by comparing the file hash with a known good copy.
Yet another one: antivirus software (especially Symantec or McAfee) sometimes holds a lock on the .nls file, making RPC think it's zero-length. Disable real-time scanning temporarily to test.
If you're on a domain controller, the error might also show when replicating with a partner DC. The fix is the same: copy the .nls file from a healthy DC.
Prevention
First, don't manually delete .nls files. They're not junk. They're part of the National Language Support layer.
Second, run regular file integrity checks on your System32 folder. You can use PowerShell:
Get-ChildItem C:\Windows\System32\c_*.nls | Where-Object { $_.Length -lt 512 }
This lists any .nls file smaller than 512 bytes. If you run this monthly, you'll catch the problem before it causes an error.
Third, keep your Windows updates current. Some update rollups fix .nls file corruption issues. Specifically, KB4474419 and later cumulative updates for Server 2016/2019 improved .nls handling.
Fourth, if you use third-party backup software that backs up System32, make sure it doesn't corrupt open files. Use Volume Shadow Copy (VSS) aware backup.
That's it. Fix the file, move on. No need to rebuild the server or reinstall SQL Server.
Was this solution helpful?