2017-08-07 155 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',它也是主鍵的一部分。 –