修复SQL Server 2005 Mgmt Studio自定义键盘加速器快捷方式中的参数处理?
如本文所述,我一直是存储过程键盘加速器的迷。但是,当我们从SQL 2000迁移到2005并从查询分析器迁移到Management Studio时,对参数的处理发生了变化。在质量检查中,逗号分隔的参数会自动读取为两个单独的参数。在SSMS中-至少对我来说-它被视为一个参数,并带有逗号。同样,如果传入一个带有单引号的参数,则会产生语法错误,除非我转义了引号('->'')。在上面链接的文章中,作者暗示SSMS应该不是这种情况,但是即使使用她的确切示例,逗号分隔的参数仍然被解释为我尝试过的每个SSMS安装中的一个参数(第3页,共3页)它们),针对我尝试过的每个SQL Server安装(其中4个)运行。
例如,在SSMS中输入以下内容,
Person,4
然后选择它并运行快捷方式,我收到错误消息"无效的对象名称'Person,4'。
有谁知道如何解决这个问题?有人甚至使用这些快捷方式吗?在过去的两年中,我已经多次对此问题进行过Google搜索,但是没有运气。
编辑:可能是SSMS特定版本的问题。我在下面有一个后续帖子。
解决方案
回答
在阅读问题然后阅读我们所引用的文章之前,我从未尝试过这样做,所以请带着一点盐。
就是说,我能够使用SSMS在我的计算机上运行该程序,并且我也能够复制我们描述的错误。
为了使它按预期工作,我在master数据库中创建了sproc,分配了键盘快捷键并重新启动了SSMS。然后,我在单引号中键入databasename.schema_name.table_name,后接逗号和一个整数值(我测试的sproc是本文中的GetRows示例)。我仍然连接到master数据库。
这项工作没有任何意外。
为了得到与我们提到的相同的错误,我删除了对架构名称或者数据库名称的引用,并收到了与我们相同的错误。
也许我们需要在表名之前添加数据库名和架构名?
回答
Tim的建议并不能解决我开发PC上的问题,但是确实说服了我再次尝试使用其他PC。当使用另一台PC的SSMS登录到开发PC的数据库并完全尝试Tim所描述的内容时,我的行为与Tim所描述的相同。
我还能够在过去尝试过的其他PC上重新复制参数解析问题。我希望Tim可以让我知道他的SSMS安装的版本和内部版本号,因为我目前的理论是问题仅出自我和我的同事在开发PC上的特定内部版本-版本字符串为" Microsoft SQL Server Management Studio 9.00.1399.00"。我们对该版本的所有安装都在一年前完成,因此我不知道我可以追溯到它来自哪个磁盘。
没有问题的一个实际上是我们的开发服务器,该服务器安装了" Microsoft SQL Server Management Studio 9.00.3042.00"。我不知道这是否可以通过打补丁来解决,但目前看来1399会将整个选择作为单个参数读取,而3042则做了一些预解析。最近,我还发现,当我在3042中传入包含"-"(注释令牌)的字符串时,"-"之后的所有内容都会被忽略,而在1399年,所有内容都包含在第一个参数中。
回答
我也使用了9.00.3042.00版本的SSMS,这可能解释了为什么它在我的机器上可以正常工作。
回答
同意蒂姆。我刚刚升级到SQL Server 05 sp2,并且确认此错误已修复。