L'index était en dehors des limites du tableau. (Microsoft.SqlServer.smo)

91

J'utilise SQL Server 2008 R2. Cela fonctionne bien. Mais récemment, j'ai changé de serveur d'hébergement et j'ai appris qu'ils étaient installés SQL Server 2012sur Server.

Maintenant, le problème est qu'après la connexion à la base de données du serveur via SQL Server 2008 R2, lorsque je clique sur un nom de table ou une procédure stockée, j'obtiens une erreur: Index was outside the bounds of the array. (Microsoft.SqlServer.smo)

Alors, y a-t-il un problème de mon côté ou du côté du serveur ??? et comment puis-je éviter ce problème?

Jeeten Parmar
la source
@ paul.abbott, est-ce obligatoire ???
Jeeten Parmar
Vous pouvez continuer, la nouvelle fonctionnalité ne sera pas disponible avec elle.
Samith C Valsalan
1
Dans notre cas, nous avons restauré une base de données 2008 R2 dans SQL 2016 et nous avons eu le même problème en essayant d'utiliser le diagramme de quelque manière que ce soit. Après avoir exécuté SSMS 2016 13.0.15900.1 en tant qu'administrateur, le problème a été résolu. Allez comprendre!
Marc Roussel

Réponses:

51

Mettez à niveau votre studio de gestion SqlServer de 2008 à 2012

Ou Téléchargez les service packs de SqlServer Management Studio et mettez à jour probablement votre solution

Vous pouvez télécharger le SQL Server Management Studio 2012 à partir du lien ci-dessous

Microsoft® SQL Server® 2012 Express http://www.microsoft.com/en-us/download/details.aspx?id=29062

Md.Rajibul Ahsan
la source
Il n'y a pas encore de solution à ce problème. J'ai eu cette erreur dans toutes les versions du studio de gestion, y compris le 2018 - c'est dommage que ce bug soit là depuis tant d'années maintenant.
MeTitus
98

Le redémarrage du Management Studio a fonctionné pour moi.

Abisoye Falabi
la source
5
Il semble que l'erreur "hors limites" soit causée par la mise en cache de la structure de la base de données par Studio. Une fois que vous avez apporté suffisamment de modifications à la structure, celle-ci correspondra mal à la version mise en cache et commencera à générer l'erreur. Le redémarrage reconstruit le cache.
David Austin
C'était le vrai problème, je n'ai jamais eu le temps de mettre à jour ma réponse. La mise à jour corrige le bogue tu
Abisoye Falabi
41

Pour moi, ce problème existe toujours avec SSMS version 2016 (13.0.16100.1).

Une solution de contournement décente consiste à ne pas utiliser la boîte de dialogue «Clic droit» -> «Ajouter une table ...», mais simplement faire glisser la table que vous souhaitez ajouter à partir de l'Explorateur d'objets, sur la surface du diagramme. Lorsque vous faites glisser, l'icône de la souris se transforme en symbole «ajouter» et le tableau est ajouté lorsque vous relâchez la souris.

Beats avoir à fermer SSMS à chaque fois.

MeanGreen
la source
Les diagrammes ne sont plus disponibles v18.0 preview 4, j'espère qu'ils seront bientôt de retour!
MeanGreen
21

Redémarré a fonctionné! J'ai trouvé la même erreur pour ajouter une nouvelle table à mon diagramme de base de données sur le serveur SQL 2016, redémarré le studio de gestion de serveur SQL, enfin résolu.

mernig
la source
Oui. J'ai eu cette erreur sur SQL Server 2016 Management Studio (v 13.0.16106.4) Tout ce que j'avais à faire était de redémarrer l'application / l'interface utilisateur. La simple déconnexion du serveur et la reconnexion n'ont pas fonctionné.
joedotnot
7

Il s'agit d'un problème si vous utilisez les outils du studio de gestion 2008 pour vous connecter à une instance SQL 2012.

J'en ai beaucoup l'expérience si je travaille sur un serveur avec SQL 2008 et que j'essaie d'interroger rapidement un autre serveur qui exécute SQL 2012.

Je garde normalement mon poste de travail personnel sur la dernière version du studio de gestion (2012 dans ce cas), et je suis capable d'administrer tous les serveurs à partir de là.

Justin Manning
la source
6

La raison derrière le message d'erreur est que SQL n'a pas pu afficher de nouvelles fonctionnalités dans votre ancienne version de serveur SQL.

Veuillez mettre à niveau la version SQL de votre client pour la même que la version SQL de votre serveur

Samith C Valsalan
la source
2

Il est maintenant prouvé que les causes suggérées sont pratiquement impossibles. J'utilise SSMS V17.9.2 contre SS 2014 et j'ai toujours le problème. Des problèmes de mémoire existent avec cet outil depuis au moins 2006, lorsque j'ai commencé à utiliser SSMS.

Oui, MS «veut» se débarrasser du diagramme, mais les utilisateurs ne le laisseront pas. J'ai le sentiment qu'ils ne régleront jamais aucun de ces problèmes car ils veulent que les utilisateurs en aient tellement marre de l'outil qu'un nombre suffisant d'entre eux cessent de l'utiliser et qu'ils puissent l'abandonner complètement.

Le redémarrage est toujours une solution de contournement si vous pouvez le faire plusieurs fois par jour.

Bielawski
la source
1

vous devez utiliser la nouvelle version de Management Studio. Et vous obtiendrez également une erreur 29506. Vous devez donc exécuter en tant qu'administrateur pour l'installation. Regardez ce site. http://shareis.com/post/29506-management-studio-express

Çetin DOĞU
la source
1

J'ai eu une expérience similaire avec l'utilisation de SMO via C # avec la trace de pile:

[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()

Il s'est avéré que mes versions du CLR / NCLI / SMO étaient 10.50.1600.1. Leur mise à niveau vers 10.53.6000.34 l'a corrigé - permettant ainsi au SMO 2008R2 de faire beaucoup de choses avec les serveurs 2012 et 2014.

Obtenez-les du pack de fonctionnalités

https://www.microsoft.com/en-gb/download/details.aspx?id=44272

GilesDMiddleton
la source
1
J'ai trouvé ce lien pour SQL Server 2008 R2 Service Pack 3 pour être plus clair en ce qui concerne le programme d'installation à télécharger support.microsoft.com/en-us/kb/2979597
Justin
0

J'ai trouvé un problème avec le diagramme et le schéma dans SQL-Server 2016 qui pourrait être utile au sujet. J'étais en train d'éditer le diagramme (lié et avec beaucoup de tables du schéma "sales") et j'ai ajouté une nouvelle table, MAIS j'ai oublié de le déclarer schéma, donc c'était avec le "dbo" par défaut. Puis quand je suis revenu et ouvert, le schéma "ventes" et j'ai essayé d'ajouter une table existante ... Bluf! CELA a déclenché exactement la même erreur décrite dans ce fil. J'ai même essayé la solution de contournement (faites glisser la table) mais cela n'a pas fonctionné. Soudain, j'ai remarqué que le schéma était incorrect, je l'ai mis à jour, essayé à nouveau, et Eureka! le problème était immédiatement parti ... Cordialement.

Felix Guillermo Ledesma
la source
1
Bienvenue dans Stack Overflow ! Veuillez lire Comment écrire une bonne réponse ?
Saurabh Bhandari
0

C'est un très vieux problème avec le contenu encaissé. MS envisage de supprimer des diagrammes de SSMS, donc ils ne s'en soucient pas. Quoi qu'il en soit, la solution existe.

Fermez simplement l'onglet Diagrammes et ouvrez-le à nouveau. Fonctionne avec SSMS 18.2.

Tomas Vileikis
la source