减少数据类型大小会导致索引超过最大大小?
问题描述:
今天我正面临一个奇怪的消息。我不知道,如果它仅仅是一个错误:减少数据类型大小会导致索引超过最大大小?
该表由ASP.NET身份创建。但是,他们使用nvarchar(450)
作为Id,因为索引超过了900字节,所以我不能在其他表中使用它。因此,我试图减少它,但首先如何创建PK_AspNetUserRoles
?这只是一个SSMS错误?
答
什么是您的SSMS版本? 恕我直言,这是一个错误,我不能在12.0.4100.1中重现此问题。
你不能没有重新创建索引更改列类型,这样你可以收到错误可能是:
消息5074,级别16,状态1,4号线 指数“PK_AspNetUserRoles”是依赖于列'用户名'。 消息4922,级别16,状态9,行4 ALTER TABLE ALTER COLUMN UserId失败,因为一个或多个对象访问此列。
但我的SSMS只是默默地做了以下内容:
- -column
- 插入到新表SELECT * FROM原表 创建新表具有相同的名称和TMP前缀有 为nvarchar(150)
- 降原始表
- 重命名新表为旧表
- 在其上创建索引PK
无错误显示
我的版本是'13.0.16106.4'。在那个对话框中,我尝试点击是,SSMS自动将所有外键的数据类型更改为新数据类型('nvarchar(450)'为'nvarchar(150)') –
外键?你的文章没有提到他们,显示的错误是关于主键 – sepupic
对不起。我改变了'AspNetUsers'表的'Id'列。 AspNetUserRoles的'UserId'指的是'Id',它也是主键的一部分。 –