私はSQL Server 2008 R2
を使っています。それはうまくいっています。しかし最近、私は私のホスティングサーバーを変更しました、そして、彼らがServerにSQL Server 2012
をインストールしたことを知るようになりました。
さて、問題は、SQL Server 2008 R2
を通してServer Databaseに接続した後、任意のテーブル名またはストアドプロシージャをクリックすると、エラーが発生することです。Index was outside the bounds of the array. (Microsoft.SqlServer.smo)
それで、私の側から何か問題があるのでしょうか、それともサーバー側からですか?そして、どうすればこの問題を回避できますか?
SqlServer管理スタジオを2008年から2012年にアップグレードする
またはSqlServer Management Studioのサービスパックをダウンロードしてアップデートすると解決する可能性があります
下のリンクからSQL Server Management studio 2012をダウンロードできます。
Microsoft®SQLServer®2012 Expresshttp://www.Microsoft.com/en-us/download/details.aspx?id=29062
Management Studioを再起動するとうまくいきました。
私にとっては、この問題はSSMSバージョン2016(13.0.16100.1)にも存在します。
これを回避するには、[右クリック] - > [テーブルの追加]ダイアログを使用せずに、追加するテーブルをオブジェクトエクスプローラからダイアグラムサーフェスにドラッグするだけです。マウスアイコンをドラッグすると「追加」記号に変わり、マウスを離すとテーブルが追加されます。
毎回SSMSを閉じる必要があります。
再起動しました!私はSQL Serverの2016年に私のデータベースダイアグラムに新しいテーブルを追加するために同じエラーを見つけ、SQL Serverの管理スタジオを再起動し、ついに解決しました。
これは、2008年のManagement Studioツールを使用してSQL 2012インスタンスに接続している場合に問題になります。
SQL 2008を使用している1つのサーバーで作業していて、SQL 2012を実行している別のサーバーにすばやくクエリを実行しようとしている場合、私はこれをよく経験します。
私は通常、パーソナルワークステーションを最新バージョンのManagement Studio(この場合は2012)上に置き、そこからすべてのサーバーを管理することができます。
エラーメッセージの背後にある理由は、SQLが古いSQLサーバのバージョンで新機能を表示できなかったことです。
クライアントのSQLバージョンをサーバーのSQLバージョンと同じものにアップグレードしてください。
新しいバージョンのManagement Studioを使用する必要があります。また、あなたはエラー29506を得るでしょう。あなたはセットアップのために管理者として走るべきです。このサイトを見てください。 http://shareis.com/post/29506-management-studio-express
スタックトレースでC#を介してSMOを使用する場合も同様の経験があります。
[1896] System.IndexOutOfRangeException: Index was outside the bounds of the array.
[1896] at Microsoft.SqlServer.Management.Smo.BitStorage.SetBit(Int32 itemIndex, BitIndex bitIndex, Boolean value)
[1896] at Microsoft.SqlServer.Management.Smo.SqlSmoObject.AddObjectPropsFromDataReader(IDataReader reader, Boolean skipIfDirty, Int32 startColIdx, Int32 endColIdx)
[1896] at Microsoft.SqlServer.Management.Smo.SqlSmoObject.ImplInitialize(String[] fields, OrderBy[] orderby)
[1896] at Microsoft.SqlServer.Management.Smo.SqlSmoObject.Initialize(Boolean allProperties)
[1896] at Microsoft.SqlServer.Management.Smo.SqlSmoObject.OnPropertyMissing(String propname, Boolean useDefaultValue)
[1896] at Microsoft.SqlServer.Management.Smo.PropertyCollection.RetrieveProperty(Int32 index, Boolean useDefaultOnMissingValue)
[1896] at Microsoft.SqlServer.Management.Smo.PropertyCollection.GetValueWithNullReplacement(String propertyName, Boolean throwOnNullValue, Boolean useDefaultOnMissingValue)
[1896] at Microsoft.SqlServer.Management.Smo.Information.get_MasterDBPath()
私のCLR/NCLI/SMOのバージョンは10.50.1600.1でした。それらを10.53.6000.34にアップグレードすることでそれが修正されました - その結果、2008R2 SMOが2012と2014のサーバーで多くのことをすることができます。
フィーチャー・パックからそれらを入手してください
https://www.Microsoft.com/en-gb/download/details.aspx?id=44272
キャッシュされたコンテンツには非常に古い問題があります。 MSは、SSMSから図を削除することを計画しているため、彼らはこれを気にしません。とにかく、解決策が存在します。
[ダイアグラム]タブを閉じて、もう一度開きます。 SSMS 18.2で動作します。
SQL-Server 2016のDiagram and Schemaに問題があることが判明しました。ダイアグラムを編集していて( "sales"スキーマに関連し、多くのテーブルを含む)、newテーブルを追加しましたが、スキーマの宣言を忘れていたので、デフォルトの "dbo"を使用しました。 。その後、スキーマ "sales"に戻って開いたときに、既存のテーブルを追加しようとしましたが... Bluf!そのスレッドで説明されているのとまったく同じエラーが発生しました。私は(テーブルをドラッグして)回避策を試みたが、うまくいきませんでした。突然、スキーマが正しくないことに気付いたので、更新してもう一度試したところ、Eureka!問題はすぐに解決しました...よろしく。