2017-08-07 12 views
0

今日、私は奇妙なメッセージに直面しています。データ型のサイズを小さくすると、インデックスが最大サイズを超えますか?

enter image description here

テーブルはASP.NETアイデンティティによって作成されています。私はそれだけでバグであるかどうかわからないです。しかし、Idのためにnvarchar(450)を使用しています。インデックスが900バイトを超えているため、他のテーブルでは使用できません。したがって、私はそれを減らそうとしていますが、最初にPK_AspNetUserRolesを作成するにはどうすればいいですか? SSMSのバグですか?

答えて

0

あなたのSSMSのバージョンは何ですか? IMHO、バグですが、12.0.4100.1でこの問題を再現できません。

あなたが受け取ることができ、エラーがあるかもしれないので、あなたは、インデックスを再作成することなく、列の型を変更することはできません。

メッセージ5074、レベル16、状態1、行4 インデックス「PK_AspNetUserRolesは」 'の列に依存していますユーザーID'。 メッセージレベル4922、レベル16、状態9、行4 ALTER TABLE ALTER COLUMN 1つ以上のオブジェクトがこの列にアクセスしたため、ユーザーIDが失敗しました。

しかし、私のSSMSはただ黙って次のことをやった:元のテーブルから

  • 選択新しいテーブルに挿入し、同じ名前とTMPの接頭辞が
  • -column はnvarchar(150)を持つ新しいテーブルを作成します*
  • ドロップ元のテーブル
  • は古いテーブル
  • その上にインデックスPKを作成すると、新しいテーブルの名前を変更

エラーは表示されませんでした。

+0

私のバージョンは「13.0.16106.4」です。そのダイアログでは、とにかく[はい]をクリックしてみましたが、SSMSは自動的にすべての外部キーのデータ型を新しいものに変更しました( 'nvarchar(450)'〜 'nvarchar(150)') –

+0

外部キー?あなたの投稿には何も言われておらず、表示されているエラーはプライマリキー – sepupic

+0

です。私は 'AspNetUsers'テーブルの' Id'カラムを変更しました。また、 'AspNetUserRoles'の' UserId'は 'Id'を参照しており、これも主キーの一部です。 –

関連する問題