sql-server - 计算列上的索引触发 900 字节索引大小限制

标签 sql-server sql-server-2005

我有一个包含计算得出的 VARCHAR 列的表,该列最多包含 106 个字符:

CREATE TABLE report (
    report_id INT IDENTITY(1, 1) NOT NULL,
    name VARCHAR(100) COLLATE Modern_Spanish_CI_AI NOT NULL,
    city_id VARCHAR(6) COLLATE Modern_Spanish_CI_AI,

    unique_name AS
    CASE
        WHEN city_id IS NULL
        THEN name
        ELSE name + REPLICATE(' ', 100 - LEN(name)) + city_id
    END COLLATE Modern_Spanish_CI_AI,

    CONSTRAINT report_pk PRIMARY KEY (report_id)
);

/* Report name is unique per city (and among city-less rows) */
CREATE UNIQUE INDEX report_idx1 ON report (unique_name);

但是当我运行该语句时,我收到此警告:

Warning! The maximum key length is 900 bytes. The index 'report_idx1' has maximum length of 8000 bytes. For some combination of large values, the insert/update operation will fail.

有没有办法告诉 SQL Server 该列不会超过 106 个字符,以便我消除警告?

最佳答案

尝试CAST(CASE ... END AS VARCHAR(106))...

CAST(CASE
    WHEN city_id IS NULL
    THEN name
    ELSE name + REPLICATE(' ', 100 - LEN(name)) + city_id
END AS VARCHAR(106)) COLLATE Modern_Spanish_CI_AI 

或者干脆忽略它...这只是一个警告。

关于sql-server - 计算列上的索引触发 900 字节索引大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18142360/

相关文章:

SQL错误: The multi-part identifier "tableName.ColumnName" could not be bound

sql-server-2005 - 如何从 T-Sql 中的日期时间中提取日期?

c# - C#中存储过程的返回值返回错误

sql - SQL Server 2005 中 VARBINARY 字段的大小

sql-server - 将更新尝试保存在更新触发器的临时表中

sql - 每个项目的单独百分比、吞吐量

sql-server - 如何在 Sql 中创建 "month"列?

存储过程中的 SQL Server 变量范围

java - 以字节数组和二进制 (BLOB) 存储图像的区别以及哪个更快

SQL Server 2005 恢复挂起