Index '%.*ls' could not be created or rebuilt. The key length for this index (%d bytes) exceeds the maximum allowed length of '%d' bytes when using the vardecimal storage format.

Error Message:
Msg 10617, Level 16, State 1, Line 2
Index ‘%.*ls’ could not be created or rebuilt. The key length for this index (%d bytes) exceeds the maximum allowed length of ‘%d’ bytes when using the vardecimal storage format. Severity level:
16. Description:
This error message appears when you try to create an index on a table for which the vardecimal storage format is enabled and the total key length exceeds the maximum allowed length of 900 bytes. Consequences:
The T-SQL statement can be parsed, but causes the error at runtime. Resolution:
Errors of the Severity Level 16 are generated by the user and can be fixed by the SQL Server user. The statement cannot be executed this way. You cannot create an index exceeding the maximum allowed length of 900 bytes. Versions:
This error message was introduced with SQL Server 2005. Example(s):
USE master;
GO IF DB_ID (‘test’) IS NOT NULL
    DROP DATABASE test;
GO CREATE DATABASE test;
GO EXEC sp_db_vardecimal_storage_format ‘test’, ‘ON’ ;
GO USE test;
GO IF OBJECT_ID (‘dbo.t’) IS NOT NULL
    DROP TABLE dbo.t;
GO CREATE TABLE dbo.t
(
    c1 decimal(19,8),
    c2 varchar(891)
); EXEC sp_tableoption ‘dbo.t’, ‘vardecimal storage format’, 1;
GO CREATE INDEX IX_t_c1 ON dbo.t(c1, c2); Remarks:
In the above example we try to create an index on dbo.t for which the vardecimal storage format is enabled. Creating the index raises the error, because the column precision of 19 for c1 consumes 10 bytes with vardecimal storage format enabled, while only 9 bytes using the original fixed length size. So, the combined size of the index with vardecimal storage format enabled is now 901 bytes instead if 900 bytes. This raises the error. ]]>

Leave a comment

Your email address will not be published.