【问题标题】:How can I resolve “The cursor was not declared” from SQL Server如何从 SQL Server 解决“未声明游标”
【发布时间】:2011-12-11 02:35:18
【问题描述】:

我正在通过 WebSphere 中的 Spring 连接到 SQL Server。我有一段非常简单的动态 SQL(如下)正在抛出“未声明游标。”

SELECT TOP 1
    short_desc shortDescription
FROM
    product.prs.PRODUCT_SKN (nolock)
WHERE
    prod_sales_div_code = 'XXX'
    AND product_nbr = ?

似乎相关的数据源设置之一是“选择模式”是“光标”。我不确定我需要做什么来解决这个错误。

edit 调用代码为: findShortDescriptionQuery.get().findObjectByNamedParam(of("productNumber", productId))

【问题讨论】:

  • 你关于“数据源”的最后一句话让我相信你在谈论客户端设置?从 SSMS 运行此查询时是否收到此错误?如果没有,您可能需要更改您的问题,使其更加以客户为中心。
  • 我没有收到 SSMS 中的错误。我觉得它必须是 Spring 或 WebSphere 设置
  • 或者可能是驱动版本之类的......
  • 那么你需要调整你的问题。 iow:发布您的呼叫代码。 ...否则没有人能帮助你。克维姆?

标签: sql sql-server spring websphere


【解决方案1】:

试着说WITH (nolock) 而不仅仅是(nolock)。最新版本的 sql server 不再支持后一种语法。

【讨论】:

    【解决方案2】:

    我完全删除了“nolock”指令以及“TOP 1”,问题就消失了。这让我怀疑它与 JDBC 驱动程序有关。

    这种解决方法不太理想,但对我的目的来说效果很好。

    【讨论】:

      【解决方案3】:

      检查您正在使用的服务器上的哪个数据库。如果您在同一服务器上有不同的数据库,则默认情况下,您的 sql 客户端通常会选择“master”或其他类似的数据库来运行查询(如果您未指定)。在查询之前选择包含您正在查询的表或使用USE <dbname> GO 的表将处理错误。

      【讨论】:

        【解决方案4】:

        我不知道这个答案在 10 年后可能有多大的相关性,但是在处理一些旧代码时我偶然发现了同样的“错误”,我通过从查询中删除字段列表来解决它,留下效率低下SELECT *。这解决了我的问题。

        顺便说一句,旧代码使用 Microsoft SQL Server ODBC 驱动程序来访问 SQL Server,看来问题正是如此,因为相同的查询运行在 SSMS 上工作没有问题'。

        【讨论】:

          猜你喜欢
          • 2021-03-14
          • 2011-05-14
          • 1970-01-01
          • 2020-03-03
          • 1970-01-01
          • 1970-01-01
          • 2016-12-29
          • 1970-01-01
          • 2018-01-16
          相关资源
          最近更新 更多