0

如本文所述,我一直是存储过程键盘加速器的粉丝。但是,当我们从 SQL 2000 迁移到 2005 并从 Query Analyzer 迁移到 Management Studio 时,参数的处理方式发生了变化。在 QA 中,逗号分隔的参数被自动读取为两个单独的参数。在 SSMS 中——至少对我而言——它被当作一个论点来解读,其中包含逗号。同样,如果我传入一个带有单引号的参数,我会收到语法错误,除非我转义引号('->'')。在上面链接的文章中,作者暗示 SSMS 不应该是这种情况,但即使有她的确切示例,逗号分隔的参数仍然被解释为我尝试过的每个 SSMS 安装的一个参数(3 个它们),针对我尝试过的每个 SQL Server 安装(其中 4 个)运行。

例如,在 SSMS 中输入以下内容,

Person,4

然后选择它并运行快捷方式,我收到错误消息“无效的对象名称'Person,4'。

有人知道如何解决这个问题吗?有人甚至使用这些快捷方式吗?在过去的两年里,我多次在谷歌上搜索过这个问题,但都没有运气。

编辑:可能是特定版本的 SSMS 的问题。我在下面有一个后续帖子。

4

4 回答 4

1

在阅读您的问题然后阅读您引用的文章之前,我从未尝试过此操作,因此请谨慎对待。

也就是说,我可以使用 SSMS 让该过程在我的计算机上运行,​​并且我还可以复制您描述的错误。

为了让它按预期工作,我在主数据库中创建了存储过程,分配了键盘快捷键并重新启动了 SSMS。然后我在单引号中键入了 databasename.schema_name.table_name,后跟一个逗号,然后是一个整数值(我测试的存储过程是文章中的 GetRows 示例)。我仍然连接到主数据库。

这很顺利。

为了获得您提到的相同错误,我删除了对架构名称或数据库名称的引用,并收到了与您相同的错误。

也许您需要在表名之前添加数据库名称和模式名称?

于 2008-09-17T18:08:44.780 回答
0

Tim 的建议并没有解决我在开发 PC 上的问题,但它确实说服了我从另一台 PC 上再试一次。当使用不同 PC 的 SSMS 登录到开发 PC 的数据库并尝试完全按照 Tim 描述的内容时,我的行为与 Tim 描述的相同。

我还能够在我过去尝试过的其他 PC 上重新复制参数解析问题。我希望 Tim 可以让我知道他的 SSMS 安装的版本和内部版本号是什么,因为我目前的理论是问题只是来自我和我的同事在我们的开发 PC 上的特定版本 - 版本字符串是“Microsoft SQL Server 管理工作室 9.00.1399.00”。我们对该版本的所有安装都发生在一年前,所以我不知道我可以追溯到它来自哪个磁盘。

没有问题的实际上是我们的开发服务器,它安装了“Microsoft SQL Server Management Studio 9.00.3042.00”。我不知道这是否可以通过修补或其他方式消除,但目前看起来 1399 将整个选择作为单个参数读取,而 3042 进行了一些预解析。我最近还发现,当我在 3042 中传入一个包含“--”(注释标记)的字符串时,“--”之后的所有内容都会被忽略,而在 1399 中,它都包含在第一个参数中。

于 2008-09-17T19:25:43.267 回答
0

我也在使用 SSMS 版本 9.00.3042.00,这可能解释了为什么它可以在我的机器上运行。

于 2008-09-18T13:22:39.577 回答
0

同意蒂姆。我刚刚升级到 SQL Server 05 sp2,并确认此错误已得到修复。

于 2008-12-18T11:26:49.893 回答