4

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

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);

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

警告!最大密钥长度为 900 字节。索引“report_idx1”的最大长度为 8000 字节。对于较大值的某些组合,插入/更新操作将失败。

有没有办法告诉 SQL Server 该列不会超过 106 个字符,所以我摆脱了警告?

4

1 回答 1

4

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 

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

于 2013-08-09T08:00:56.327 回答