【问题标题】:Reducing data type size causes index to exceed maximum size?减少数据类型大小会导致索引超过最大大小?
【发布时间】:2018-01-14 05:23:27
【问题描述】:

今天我面临一个奇怪的消息。我不确定这是否只是一个错误:

这些表是由 ASP.NET Identity 创建的。但是,他们使用 nvarchar(450) 作为 Id,我不能在其他表中使用它,因为索引超过 900 字节。因此我试图减少它,但首先如何创建PK_AspNetUserRoles?这只是一个 SSMS 错误吗?

【问题讨论】:

    标签: sql-server database indexing ssms sql-server-2016


    【解决方案1】:

    您的 SSMS 版本是多少? 恕我直言,这是一个错误,我无法在 12.0.4100.1 中重现此问题。

    如果不重新创建索引,您无法更改列类型,因此您可能收到的错误可能是:

    消息 5074,第 16 级,状态 1,第 4 行 索引“PK_AspNetUserRoles”依赖于“UserId”列。 消息 4922,第 16 级,状态 9,第 4 行 ALTER TABLE ALTER COLUMN UserId 失败,因为一个或多个对象访问此列。

    但我的 SSMS 只是默默地做了以下事情:

    • 创建具有相同名称和 tmp 前缀的新表 nvarchar(150)-列
    • insert into new table select * from original table
    • 删除原始表
    • 将新表重命名为旧表
    • 在其上创建索引 PK

    没有显示错误

    【讨论】:

    • 我的版本是13.0.16106.4。在该对话框中,我尝试单击“是”,SSMS 自动将所有外键的数据类型更改为新的(nvarchar(450)nvarchar(150)
    • 外键?您的帖子没有提及它们,显示的错误是关于主键
    • 对不起。我更改了AspNetUsers 表的Id 列。而AspNetUserRoles中的UserId指的是Id,也是Primary Key的一部分。
    • 你能用 AspNetUserRoles PK 的定义更新你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2014-10-11
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多