【问题标题】:Implicit cursor conversion due to comments由于注释的隐式游标转换
【发布时间】:2017-04-05 14:30:04
【问题描述】:

我在 C++ 应用程序中使用 ODBC 连接到 SQL Server 我在从“DynamicServer”(以及任何服务器端 odbc 游标)到“仅客户端转发”的简单 SELECT 查询中意外发生了隐式游标转换

我最近意识到这是由于在查询开头写了 cmets(/**/ 或 --)。

我可以在“SQL Server Native Client 11.0”和“ODBC Driver 13 for SQL Server”上重现此行为

我们确实会发送这些 cmets,以便在服务器端轻松识别查询。 举个例子:

没有光标类型转换发生在:

SELECT * from table_x

但是无法使用以下查询打开服务器游标

-- selectYY.sql
SELECT * from table_x

另外我注意到在查询中间或查询之后带有 /**/ 的注释不会触发光标转换

有人知道这里发生了什么吗? 这是预期的行为吗?

根据 msdn 的预期行为是批处理查询(带有多个语句的查询)被转换为 ClientForwardOnly,初始注释足以将查询视为批处理似乎很奇怪。

【问题讨论】:

  • 会不会是换行符触发了“批量查询”?这个查询会发生什么:/* -- selectYY.sql */ SELECT * from table_x?或者查询在某处之间有一个换行符(不能写成正确格式的评论,希望你明白),比如select * FROM \r\n table_x
  • 我已经尝试在查询的开头和中间使用无用的换行符和空格,它不会影响光标类型
  • SqlServer 团队正在调查link

标签: sql-server types cursor odbc


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    相关资源
    最近更新 更多