【发布时间】:2011-01-12 04:24:32
【问题描述】:
我必须使用老式 ADODB(不是 ADO.NET)来执行包含公用表表达式的语句。 我正在使用(必须使用)SQLOLEDB 提供程序。 DML 语句在从 Windows 7 / Windows Server 2008 客户端而不是从 WinXP 或 Win2K3 服务器执行时工作正常。 我分析了该例程,发现旧操作系统发送的 SQL 语句略有不同。
Win7 + 2008 = exec sp_executesql N'WITH source(Vsl, Cpt, SrcTyp, SrcNum, Opn, JobNum, Qty, Cst, Vry, Reg, Vnt, Sbk) AS ...'
WinXP + Win2K3 = exec sp_executesql N'exec WITH source(Vsl, Cpt, SrcTyp, SrcNum, Opn, JobNum, Qty, Cst, Vry, Reg, Vnt, Sbk) AS ...'
请注意额外的 'exec' 滑入命令文本中。
看起来好像旧操作系统上的 SQLOLEDB.1 版本错误地处理了 WITH 语句,并认为它需要一个前置“exec”。
任何人都可以对此有所了解。是否有可以应用于旧操作系统的 SQLOLEDB 驱动程序更新?或其他一些解决方法。
【问题讨论】:
-
详细帮助 -- 如果 CTE 不是递归的,那么无论如何都没有任何好处,因此您可以将其重写为派生表/内联视图。
-
咳嗽存储过程咳嗽
标签: sql windows-xp ado common-table-expression