2017-08-07 97 views
0

今天我正面临一个奇怪的消息。我不知道,如果它仅仅是一个错误:减少数据类型大小会导致索引超过最大大小?

enter image description here

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

回答

0

什么是您的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

无错误显示

+0

我的版本是'13.0.16106.4'。在那个对话框中,我尝试点击是,SSMS自动将所有外键的数据类型更改为新数据类型('nvarchar(450)'为'nvarchar(150)') –

+0

外键?你的文章没有提到他们,显示的错误是关于主键 – sepupic

+0

对不起。我改变了'AspNetUsers'表的'Id'列。 AspNetUserRoles的'UserId'指的是'Id',它也是主键的一部分。 –