【发布时间】: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