首页 > 解决方案 > SQL server 获取数据库中超过 450 个 Unicode 字符或 900 个字节的所有列

问题描述

我想获取数据库中超过 450 个 Unicode 字符或 900 个字节(SQL 服务器)的所有列

标签: sqlsql-servertsql

解决方案


使用此查询查看会引发以下警告的索引:

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

SELECT 
    SchemaName = ss.name, 
    TableName = so.name, 
    IndexName = si.name, 
    KeyColumnMaxLength = SUM(sc.max_length)
FROM 
    sys.objects so 
    JOIN sys.columns sc ON so.object_id = sc.object_id
    JOIN sys.schemas ss ON so.schema_id = ss.schema_id
    JOIN sys.indexes si ON sc.object_id = si.object_id
    JOIN sys.index_columns sic ON 
        si.object_id = sic.object_id AND 
        si.index_id = sic.index_id AND 
        sic.column_id = sc.column_id
WHERE
    so.type = 'U' AND 
    sic.is_included_column = 0
GROUP BY 
    ss.name, 
    so.name, 
    si.name
HAVING 
    SUM(sc.max_length) > 900
ORDER BY 
    SUM(sc.max_length) DESC

推荐阅读