Sql server 索引超出了数组的边界。(Microsoft.SqlServer.smo)

Sql server 索引超出了数组的边界。(Microsoft.SqlServer.smo),sql-server,sql-server-2008,sql-server-2012,Sql Server,Sql Server 2008,Sql Server 2012,我使用的是SQLServer2008R2。它工作得很好。但最近,我更换了主机服务器,我知道他们已经在服务器上安装了SQLServer2012。 现在的问题是,在通过SQLServer2008R2与服务器数据库连接后,当我单击任何表名或存储过程时,我得到一个错误:索引超出了数组的边界。(Microsoft.SqlServer.smo) 那么,是我这边的问题还是服务器端的问题???如何防止此问题?将SqlServer management studio从2008年升级到2012年 或 下载SQLSe

我使用的是
SQLServer2008R2
。它工作得很好。但最近,我更换了主机服务器,我知道他们已经在服务器上安装了
SQLServer2012


现在的问题是,在通过
SQLServer2008R2
与服务器数据库连接后,当我单击任何表名或存储过程时,我得到一个错误:
索引超出了数组的边界。(Microsoft.SqlServer.smo)



那么,是我这边的问题还是服务器端的问题???如何防止此问题?

将SqlServer management studio从2008年升级到2012年

或 下载SQLServerManagementStudio的服务包并更新您的解决方案

您可以从以下链接下载SQL Server Management studio 2012


http://www.microsoft.com/en-us/download/details.aspx?id=29062

如果使用2008 management studio工具连接到SQL 2012实例,则会出现此问题

如果我在一台使用SQL 2008的服务器上工作,并尝试快速查询另一台运行SQL 2012的服务器,我会经常遇到这种情况


我通常将我的个人工作站保留在最新版本的management studio(本例中为2012)上,并且能够从该版本管理所有服务器。

错误消息背后的原因是SQL无法在旧的SQL server版本中显示新功能


请将客户端SQL版本升级到与服务器SQL版本相同的版本。您必须使用新版本的Management Studio。你也会得到一个错误29506。因此,您应该以管理员身份运行安装程序。 看看这个网站。

我有过类似的经验,通过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服务器上执行许多操作

从功能包中获取它们


重新启动Management Studio对我很有效。

对于我来说,2016版SSMS(13.0.16100.1)仍然存在此问题。

一个不错的解决方法是不要使用“右键单击”->“添加表格…”对话框,而只是将要添加的表格从对象资源管理器拖到图表表面上。拖动鼠标时,图标变为“添加”符号,释放鼠标时会添加表格


胜过每次都必须关闭SSM。

我发现SQL Server 2016中的图表和模式存在一个问题,这可能对本主题有用。 我正在编辑图表(与“sales”模式相关,并且有很多表),添加了一个新的表,但是忘记声明它的模式,所以使用了默认的“dbo”。然后,当我返回并打开模式“sales”并尝试添加一个现有表时。。。哎哟!这触发了与该线程中描述的完全相同的错误。 我甚至尝试了解决方法(拖动桌子),但没有成功。突然,我注意到模式不正确,我更新了它,再试一次,真是妙极了!问题马上就解决了。。。问候。

工作顺利!
我在sql server 2016上向数据库关系图添加新表时发现了相同的错误,重新启动了sql server management studio,最终解决了。

这是现金内容的老问题。MS计划从SSMS中删除图表,所以他们不关心这一点。无论如何,解决方案是存在的


只需关闭“图表”选项卡,然后再次打开它。适用于SSMS 18.2。

建议的原因现已证明基本不可能。我正在运行SSMS V17.9.2来对抗SS 2014,但仍然存在问题。至少从2006年我开始使用SSMS以来,这个工具就存在内存问题

是的,微软“想要”摆脱图表设计,但用户不会让他们这么做。我有一种感觉,他们永远不会解决这些问题,因为他们希望用户对这个工具感到厌倦,以至于有足够多的人放弃使用它,他们可以完全放弃它


如果你能忍受每天这么多次重启,重启仍然是一个解决办法。

你必须使用最新版本的SSMS

您可以通过此页面查看最新版本

@paul.abbott,这是强制性的吗???你可以继续,新功能将不可用。在我们的案例中,我们在SQL 2016中恢复了2008 R2数据库,我们在尝试以任何方式使用该图表时遇到了相同的问题。在以管理员身份运行SSMS 2016 13.0.15900.1后,解决了问题。算了吧!我发现SQL Server 2008 R2 Service Pack 3的此链接更清楚地说明了要下载的安装程序欢迎使用!请阅读?似乎“越界”错误是由Studio缓存数据库结构引起的。对结构进行足够的更改后,它将与缓存的版本不匹配,并开始生成错误。重新启动会重建缓存。这是真正的问题,我从来没有时间更新我的答案。更新修复了bug thouI在SQLServerManagementStudio(SSMS)的v18.6版本中也出现了相同的错误。解决方法是退出应用程序并重新启动。我在使用SQL Server Management Studio v.18时遇到此问题,关闭应用程序并再次打开它为我解决了此问题。图表不再可用v18.0预览4,希望它们很快会回来!从18.1及以上版本开始,它们再次可用。你的愿望已经实现了(他们从17.0开始就被删除了,但似乎是因为大众的要求才回来的,看)。是的。我在SQL Server 2016 Management Studio(v13.0.16106.4)上遇到此错误,我所要做的就是重新启动应用程序/用户界面。只是断开服务器并重新连接不起作用。目前还没有解决方法。我在所有版本的management studio(包括2018)中都遇到过这个错误-很遗憾,这个错误已经存在这么多年了。现在是2020年,它仍然没有被修复。欢迎来到@Osman Taskiran,你能详细说明你的帖子并解释错误吗