使用参数时Excel ODBC临时表无法正常工作的解决方案咨询
Excel ODBC中同时使用临时表和参数的解决办法
在Excel ODBC环境里,确实可以同时使用临时表和参数,但你的写法会因为ODBC驱动的批处理执行逻辑报错——驱动会把带参数的多语句查询拆分开执行,第一个语句执行完后临时表#Department就会被销毁,第二个语句自然找不到它。
你给出的报错查询代码如下:
SELECT * INTO #Department FROM Reference.Department WHERE OpeningDate < ? SELECT * FROM #Department
下面是几种可行的解决办法:
用表变量替代临时表
表变量的作用域覆盖整个批处理,不会因为驱动的拆分执行失效,写法示例:-- 先定义和Reference.Department结构匹配的表变量 DECLARE @Department TABLE ( DepartmentID INT, DeptName VARCHAR(100), OpeningDate DATE -- 其他列根据实际表结构补充 ) INSERT INTO @Department SELECT * FROM Reference.Department WHERE OpeningDate < ? SELECT * FROM @Department将查询打包为单个批处理执行
通过EXEC把整个查询作为一个字符串执行,确保临时表在同一会话中存在,注意参数的类型转换(以日期类型为例):EXEC(' SELECT * INTO #Department FROM Reference.Department WHERE OpeningDate < ''' + CONVERT(VARCHAR(20), ?, 23) + ''' SELECT * FROM #Department ')调整ODBC驱动设置
如果用的是SQL Server ODBC驱动,打开数据源配置的「高级」选项卡,勾选「允许使用多语句」,然后直接提交原查询即可——驱动会把整个查询作为单个批处理执行,临时表就能在第二个语句中被正常访问。
内容的提问来源于stack exchange,提问作者GGSSean
相关产品推荐
相关产品推荐

