我有一个包含计算得出的 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/