Уменьшение размера типа данных приводит к тому, что индекс превышает максимальный размер?

Сегодня я сталкиваюсь со странным сообщением. Я не уверен, что это просто ошибка:

Таблицы создаются ASP.NET Identity. Тем не менее, они используют nvarchar(450) для идентификатора, который я не могу использовать в других таблицах, потому что индекс превышает 900 байтов. Поэтому я пытаюсь уменьшить его, но как мог PK_AspNetUserRoles быть создан в первую очередь? Это просто ошибка SSMS?

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)
  • вставить в новую таблицу выберите * из исходной таблицы
  • сбросить оригинальный стол
  • переименовать новую таблицу в старую таблицу
  • создать индекс PK на нем

Ошибка не отображалась

Другие вопросы по тегам